• c#操作Xml(二)


    2 用Dom的方式创建/修改xml

        上一篇讲了如何用dom的方式读一个xml,这一篇就讲一下如何用dom的方式去写一个xml。不过,用dom的写Xml本身并不是一个好主意,因为Dom方式本身的废话超多,做一个简单的事情就需要好几句语句,但是作为一个基本的方式还是有必要了解一下的。

    2.1 用Dom的方式去创建xml

        如果想写出这样一个xml:

    image

        那么你可能需要这样一大段代码:

    image

        分析一下,在dom方式下要创建任何一个xml的节点都必须要使用XmlDocument的对应的Create方法创建,然后再添加到对应的位置,这也就是Dom方式最麻烦的地方。

        看看运行结果:

    image

        这个xml和我们期望的xml是等价的,只是没有被格式好,好吧,想要一个格式化好的文档,那么就修改一下写xml的部分(在讲xmlwriter的时候还会讲到这个setting类):

    image

        再看看运行结果:

    image

        这样就和期望的xml一致了。

    2.2 用Dom的方式去创建有namespace的xml

        如果有namespace的xml怎么创建哪?

        其实也很简单,换一个重载就可以了,在创建节点的时候用带有namespace的重载就可以了:

    image

        再看一下结果:

    image

    2.3 用Dom的方式去修改xml

        修改xml其实也无非就是读取xml然后再做必要的增删改。

        在修改之前,首先当然就是要定为到xml的节点,这个在第一篇里面已经讲过。

        如果所做的修改是添加节点那么基本上就和上一节的内容相似:

    image

        在原来这个xml的基础上添加一个person——Allen Lee,可以看到几乎就是把第一篇的读xml和前一节的创建xml结合起来,开看看运行结果吧:

    image

        那么删除节点怎么办哪?

        例如,要从已经有多个Person的xml中,删除凡是FirstName叫Allen的Person,就可以这样写:

    image

        注意,这里用了个XPath去查询所有的FirstName叫Allen的Person,也就是:

        /v:persons/v:person[v:firstName='Allen']

        v是namespace,之前用已经解释过了,这个XPath要找的是根节点里面的(/)persons节点(v:persons)里面的(/)person节点(v:person),那么[]在这里是什么意思哪?[]中间的部分代表条件约束,或者说是where,前面的XPath部分已经选择person节点,现在对找到的Person做个条件约束,条件的内容是firstname的值需要是Allen(v:firstName=’Allen’)。

        通过上面的这个XPath就可以定位到一个节点集,c#中为XmlNodeList类型,里面有一系列的节点(例子中为1个),然后将他移除即可,不过该死的Dom Api需要在父节点中删除这个节点,也就是不得不用这种很恶心的写法:

        node.ParentNode.RemoveChild(node);

        修改就暂时讲到这里,其他类型的修改由于比较简单,就展开再说了。

        看到这里,想必读者也知道如何操作xml了,但是,Dom Api的繁琐写法确实非常影响工作效率,下一篇,将进入Linq to Xml时代,来看看新的Api带来的巨大的工作效率的提升。

  • 相关阅读:
    VIM
    函数指针
    《BOOST程序库完全开发指南》 第13章 编程语言支持
    《BOOST程序库完全开发指南》 第01章 Boost程序库总论
    gtest
    《BOOST程序库完全开发指南》 第04章 实用工具
    distcc配置
    《BOOST程序库完全开发指南》 第08章 算法
    Makefile
    《BOOST程序库完全开发指南》 第03章 内存管理
  • 原文地址:https://www.cnblogs.com/vwxyzh/p/1593900.html
Copyright © 2020-2023  润新知