专栏首页刘晓杰C#通过XPath解析xml文件

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();
        }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用 Intent 启动 Activity和Activity之间的数据传递

    在Android 程序之中,Activity 对象时和用户交互的唯一手段,几乎每个 Android 项目程序都有多个 Activity。因此,灵活的在屏幕上切换...

    指点
  • Android开发笔记(八十四)使用Properties读写属性值

    Java中的配置文件常为.properties文件,而Properties类便是读写此类文件的工具。属性文件有两种格式,一种是文本格式,其内容是“键=值”的...

    用户4464237
  • 推荐一个优秀的c++源代码,TinyXml2

    项目主页:http://grinninglizard.com/tinyxml2docs/index.html

    用户1539362
  • springboot和redis的结合使用

    微醺
  • Android自定义View

    前几天在郭霖大神的博客上看了自定义View的知识,感觉受益良多,大神毕竟大神。在此总结一下关于Android 自定义View的用法:

    指点
  • Activity的启动模式

    在Android程序中,应用程序通过活动栈来管理Activity,活动栈中有多少个Activity对象,我们在退出程序的时候就要按多少下返回键(即要将活动栈中的...

    指点
  • 使用hibernate基本步骤

    Pom.xml 中导入需要使用的jar包(可以直接百度maven repository查找你需要的jar包)

    微醺
  • 用户尝试登陆错误次数

    由于我们将使用shiro + ehache配合使用,所以可以不用单独再引用ehcache.jar了,使用shiro-ehcache时,会自动添加ehcache-...

    微醺
  • Android开发笔记(十一)自定义视图的构造方法

    Android自带的视图常常不能满足实际开发的需求,这种情况下我们就得自定义视图(View)。 首先在res\values目录下找到attrs.xml(如...

    用户4464237
  • Android开发笔记(一百二十九)使用变换图形

    ClipDrawable可设置图形的裁剪幅度,它的构造函数除了指定来源图形之外,还可以指定图形的裁剪方式(从开始裁剪还是从中间裁剪还是从末尾裁剪),以及裁剪...

    用户4464237

扫码关注云+社区

领取腾讯云代金券