1. 程式人生 > >C#通過XPath解析xml檔案

C#通過XPath解析xml檔案

以上主要是我之前蒐集的,但是工作中還是遇到了一些小問題,比如說如何刪除一個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(); }