C#通过XPath解析xml文件

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 = "" +
                "" +
                "" +
                "item1item1-value" +
                "item2item2-value" +
                "item3item3-value" +
                "item3item3-newvalue" +
                "" +
                " ";

            XmlDocument doc = new XmlDocument();
            doc.LoadXml(XMLString);

            XmlElement root = doc.DocumentElement;

            XmlNodeList ParameterNodes = root.SelectNodes("/MID/Prop/Parameter");

            //RemoveAllTest(ParameterNodes);

            RemoveChildTestNormal(ParameterNodes);
        }

        /// 
        /// RemoveAll清除所有属性,那一行还在
        /// 结果:共四行,第三行空白
        /// 
        /// 
        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();
        }

        /// 
        /// RemoveChild可以返回“被移除”的那一行。实际上那一行并没有被移除
        /// 有没有“XmlNode tmp = list[list.Count - 1]”这句有很大差别。
        /// 有的话会按照list原来的大小打印,共四行。如果没有,那就打印三行
        /// ReplaceChild根本没效果。以后如果需要去重的话,只有转化为arraylist
        /// 
        /// 
        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();
        }

你可能感兴趣的:(C#)