xpath语法讲解:http://www.w3school.com.cn/xpath/xpath_syntax.asp
用xpath解析xml的用例在这里:http://www.cnblogs.com/RiseSoft/archive/2012/03/17/2404007.html
xpath里面涉及到的一些参数的方法名:http://blog.sina.com.cn/s/blog_7c99e6bf01018ngu.html
当然,还可以在这里在线查看:http://referencesource.microsoft.com/
以上主要是我之前搜集的,但是工作中还是遇到了一些小问题,比如说如何删除一个XmlNode。为此,我做了以下demo
static void Main(string[] args)
{
String XMLString = "<?xml version=\"1.0\" encoding=\"utf - 8\"?>" +
"<MID bom=\"91 - 40F15Q7 - CHFD0AA\">" +
"<Prop>" +
"<Parameter><item>item1</item><value>item1-value</value></Parameter>" +
"<Parameter><item>item2</item><value>item2-value</value></Parameter>" +
"<Parameter><item>item3</item><value>item3-value</value></Parameter>" +
"<Parameter><item>item3</item><value>item3-newvalue</value></Parameter>" +
"</Prop>" +
"</MID> ";
XmlDocument doc = new XmlDocument();
doc.LoadXml(XMLString);
XmlElement root = doc.DocumentElement;
XmlNodeList ParameterNodes = root.SelectNodes("/MID/Prop/Parameter");
//RemoveAllTest(ParameterNodes);
RemoveChildTestNormal(ParameterNodes);
}
/// <summary>
/// RemoveAll清除所有属性,那一行还在
/// 结果:共四行,第三行空白
/// </summary>
/// <param name="list"></param>
private static void RemoveAllTest(XmlNodeList list)
{
list[2].RemoveAll();
Console.WriteLine(list.Count);
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i].InnerXml);
}
Console.ReadLine();
}
/// <summary>
/// RemoveChild可以返回“被移除”的那一行。实际上那一行并没有被移除
/// 有没有“XmlNode tmp = list[list.Count - 1]”这句有很大差别。
/// 有的话会按照list原来的大小打印,共四行。如果没有,那就打印三行
/// ReplaceChild根本没效果。以后如果需要去重的话,只有转化为arraylist
/// </summary>
/// <param name="list"></param>
private static void RemoveChildTestNormal(XmlNodeList list)
{
XmlNode tmp = list[list.Count - 1];
XmlNode moved = null;
for(int i = 0; i < list.Count; i++)
{
moved = list[i].ParentNode.RemoveChild(list[i]);
}
//list[2].ParentNode.ReplaceChild(tmp, moved);
// Console.WriteLine("tmp =\n" + tmp.InnerXml);
// Console.WriteLine("moved =\n" + moved.InnerXml);
Console.WriteLine(list.Count);
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i].InnerXml);
}
Console.ReadLine();
}