C#通過XPath解析xml檔案
阿新 • • 發佈:2019-02-06
以上主要是我之前蒐集的,但是工作中還是遇到了一些小問題,比如說如何刪除一個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();
}