前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#通过XPath解析xml文件

C#通过XPath解析xml文件

作者头像
提莫队长
发布2019-02-21 11:23:08
1.5K0
发布2019-02-21 11:23:08
举报
文章被收录于专栏:刘晓杰刘晓杰

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();
        }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年07月18日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档