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 = "<?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();
        }
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值