用ORM的思维操作XML文档,一个对象就搞定不要太简单。滚蛋吧!XmlDocument、XmlNode、Xml*

用ORM的思想操作XML文档,一个对象就搞定不要太简单。滚蛋吧!XmlDocument、XmlNode、Xml***……

  大家有没有这样的感受,一涉及XML文档操作就得百度一遍。是不是非!常!烦!。各种类型,各种方法,更别提为了找到一个节点多费劲。本来想写个XML操作的工具方法,写了两行一想既然XML文档是有规律的,如果抽象成一个树形结构的类,查找节点是不是就可以用lambda了,创建修改都是操作类,那不是好用得飞起!说干就干,经过两天打磨,终于是大功告成。系统默认的XML文件相关操作我就不吐槽了,来看看怎么飞起的吧。

  设计思路:

  写着好多啊,简单来说就是把XML标签分为两类:XmlChildTag子标签和XmlBaseTag基础标签。子标签内可以有子标签列表基础标签列表,所以一个子标签就可以表示出一个XML文件的根节点。然后一个XmlFile文件类实现XmlDocument到XmlTag标签类的互相转换查找等功能。说着太空,上图:

  1.模型定义如下。注意XmlTag是抽象类。

用ORM的思维操作XML文档,一个对象就搞定不要太简单。滚蛋吧!XmlDocument、XmlNode、Xml*

用ORM的思维操作XML文档,一个对象就搞定不要太简单。滚蛋吧!XmlDocument、XmlNode、Xml* 用ORM的思维操作XML文档,一个对象就搞定不要太简单。滚蛋吧!XmlDocument、XmlNode、Xml* 

  2.文件模型XmlFile(太长,先看下基本定义就行。项目已上github,底下有链接。)

用ORM的思维操作XML文档,一个对象就搞定不要太简单。滚蛋吧!XmlDocument、XmlNode、Xml*

  内部实现什么的我就不一一细讲了,有兴趣的同学去github上看SixAnts.XmlFile项目,注释应该很详细了(为了歪果仁我还写了英文注释……)。

 


 

  进入正题,怎么飞起:

  1.创建XML文件

用ORM的思维操作XML文档,一个对象就搞定不要太简单。滚蛋吧!XmlDocument、XmlNode、Xml*

  结果

用ORM的思维操作XML文档,一个对象就搞定不要太简单。滚蛋吧!XmlDocument、XmlNode、Xml*    用ORM的思维操作XML文档,一个对象就搞定不要太简单。滚蛋吧!XmlDocument、XmlNode、Xml*

  2.读取XML文件

用ORM的思维操作XML文档,一个对象就搞定不要太简单。滚蛋吧!XmlDocument、XmlNode、Xml*

  结果

用ORM的思维操作XML文档,一个对象就搞定不要太简单。滚蛋吧!XmlDocument、XmlNode、Xml*

   3.修改内容

用ORM的思维操作XML文档,一个对象就搞定不要太简单。滚蛋吧!XmlDocument、XmlNode、Xml*

  结果

用ORM的思维操作XML文档,一个对象就搞定不要太简单。滚蛋吧!XmlDocument、XmlNode、Xml*

   4.快速获取节点(关键飞起步骤之一)(为了展示几个不同的方法看着比较长,实际完成一次查找修改也就两三行代码搞定。)

用ORM的思维操作XML文档,一个对象就搞定不要太简单。滚蛋吧!XmlDocument、XmlNode、Xml*

   执行前:                                        执行后:

用ORM的思维操作XML文档,一个对象就搞定不要太简单。滚蛋吧!XmlDocument、XmlNode、Xml*   用ORM的思维操作XML文档,一个对象就搞定不要太简单。滚蛋吧!XmlDocument、XmlNode、Xml*

 


  折腾了两天,总算是差不多了。核心思想就是把标签对应成树形结构的模型类,实现模型类和XmlNode的相互转换。把类的操作映射为XmlNode的操作。

  虽然代码不多,但是为了合理好用,模型改了两三次,模型好了其实就可以自由操作了,为了快速高效,加了相关快速获取方法。我……大概是……为了世界和平吧……

  需要看源码或者想改进的同学看这里https://github.com/631320085/SixAnts.XmlFile

  想用的同学还可以直接从Nuget里搜索“SixAnts.XmlFile” 或执行命令:Install-Package SixAnts.XmlFile

  另外:Nuget里发布后DLL的注释都没了,以后有时间研究下怎么加,看完也差不多知道怎么用了吧。有不合理操作会抛出异常(异常没英文,懒得弄了)不保证没BUG啊,刚写好,持续改进中……

9楼小彬
这不也是dom?哪有什么对象关系映射?
Re: 咸鱼.net
@小彬,呵呵
8楼京山游侠
思路很好啊。ORM思想。,顶。
7楼沈赟
谢谢分享
6楼波波羊
linq被你吃了
5楼_小二上茶
如果XML格式固定直接序列化成实体操作应该更加方便吧
Re: 咸鱼.net
@_小二上茶,xml格式固定了还有什么意义,固化对象直接json好了。
4楼Poseur
Linq To XML?
Re: 咸鱼.net
@Poseur,object to xml
3楼我叫So
思想不错,学习!,生成注释文件在项目的生成属性打个勾就行了。
Re: 咸鱼.net
@我叫So,原来如此,等会重新发下试试
2楼troy.cui
不错!
1楼wangzhefeng
怎么算orm思想???,,如果用 Linq To XML ,代码量更少,更简单,还稳定。。。
Re: 咸鱼.net
@wangzhefeng,博客园现的观众水平越来越高了,再下不才,又碰到大神指点,感谢感谢。再下还有两篇文章,大神有空也可以去指点一二。