XML代码生成器——XMLFACTORY 简介(一)

软件开发中经常要和第三方应用交互数据,特别是在银行、电信行业,这种需求更是必不可少,往往一个系统要和三五个其它系统交互数据,而数据交换的报文经常采用Xml格式。 Xml结构严谨,利于人的阅读,但格式较复杂,用代码解析和拼装有些繁琐。无论是把Xml转化成内存中的实体类对象,还是把实体类对象序列化为XML,都是个力气活,而且耗费时间。 还好,问题总是有解决的办法,这里向大家介绍一款在线代码生成器:XmlFactary。如果你有现成的Xml文档,那么大部分情况下你不需要手工写代码来处理Xml与实体对象间的转换。

XmlFactary这款代码生成器,通过分析给定的Xml文本,称之为样本Xml,将元素映射为实体类,通过汇总每一个元素的全部子属性(Attribute),子元素(Element),及文本值(value),来形成实体类的属性。名称相同的元素,将映射为一个实体类。 下面用实例简介一下大致的用法,抛砖引玉一下。

第一步就是先准备一个XML文档,想来想去就用大家都比较熟悉的RSS格式吧。用代码生成器分析下面的Xml文档后,将默认生成三个类:Rss,Channel,Item,这三个类分别代表XML元素:<rss> <channel> <item>。


<rss version="2.0">
  <channel>
    <title>参考消息电子版</title>
    <link>http://www.ckxx.info/</link>     <item>
      <guid>http://www.ckxx.info/other1/201111/7-55584.html</guid>
      <title>伊朗核问题临近最后摊牌</title>
      <description>伊朗核问题临近最后摊牌</description>
      <link>http://www.ckxx.info/other1/201111/7-55584.html</link>
      <pubDate>2011-11-07</pubDate>
    </item>
    <item>
      <guid>http://www.ckxx.info/other1/201111/7-55583.html</guid>
      <title>日本天皇因病住院</title>
      <author>http://www.ckxx.info</author>
      <description>日本天皇因病住院</description>
      <link>http://www.ckxx.info/other1/201111/7-55583.html</link>
    </item>
  </channel>
</rss>

我喜欢目标驱动的学习方式,在学习一项技术前,最好先知道这个技术的应用结果以及能带来什么帮助,所以我先不讲如何做,而是先把做完的结果展示给大家。

这里:http://www.codingfactory.net/Page/XmlFactory/OutPut/XmlCSharp.aspx?id=8908 是根据以上XML生成的全部代码,大家最好先了解一下代码内容,再看下面的具体操作方法不迟。

另外,这款代码生成器功能较灵活,每一个步骤都有不少可配置项, 本文并不一一展开,因为过于琐碎的细节会影响我们对主流程的理解。 有关代码生成器的详细说明,可参考官方帮助文档,有兴趣的朋友可自行了解。

帮助:http://www.codingfactory.net/Page/XmlFactory/homepage/index.htm

操作

1.打开这个网址(是个flash文件,400多k,有点大要稍等一会儿):http://www.codingfactory.net/Page/XmlFactory/client/XmlFactory_Flex.html 把上面的Xml粘到样本Xml中。

2.点右上方的 NEXT 铵钮,页面跳转到 元素/子值 页签。该页面将按元素名称汇总显示每一元素的子值,你可以在此调整Xml文档的元素结构。

左侧 元素列表 显示所有XML元素(Element),右侧 子值列表 显示选中元素下的所有子值。 注意<channel>元素下有2个<item>子元素,所以,它的 多个 列中是被勾选中的,生成代码时,这一项会被映射为List<T>形式的类属性。 当然你也可以把title,link前面的勾打上,这样生成代码时,这两项也会变成List形式。

子值列表中 多个 列是蓝色字体的列头,蓝色字体表示该列可以编辑。你还可以通过 添加子值删除子值 等功能来调整Xml元素的子值结构;如果某个元素,你根本不需要,直接点 删除元素 就成了。对于本例,我们在这一页不用做任何改动。

3.再点击 NEXT 跳转到 类名称 页面。该页面中,你可以为Xml元素指定实体类名称,表示你要把元素映射为这个名称的类。

注意:不是所有的Xml元素都要映射为实体类。比如本例中的<title>,<link>元素,它们只包含一个子值:[value], 当然没必要为这种元素定义实体类,因为基本数据类型(int,bool,string……)就可以描述这个元素的值了。 所以,类名称 那一列空着什么都不填就成了,表示不将这个元素映射为类。

这个页签中三个列表的字段完全一致,区别在于:

a.最上方列表中,每一个元素都必须映射为类,也就是说 类名称 那一列中必须填一个合法的类名。

b.最下方列表中所有元素都只含有一个子值,这种元素没必要映射成类,因为基本数据类型(int,double,string,datetime)就可以代表其内容。所以 类名称 那列应该空着。

c.中间列表中的元素建议映射为类。你在 类名称 中填入类名,这个元素就映射为类;空着的话,这个元素将被脱壳(脱壳的概念有些复杂,详细说明请参考官方帮助文档)。

这部分有些复杂,不过没关系,对于我们的例子而言,这一页什么都不用做,因为一般情况下默认设置就十分合理,你直接点 NEXT 就成了。

4.点击 NEXT 跳转到 类属性 页面。这一页你要为Xml元素的子值指定对应的属性名称和数据类型。

代码生成器根据样本Xml中的内容,提供默认的数据类型,如果与你的实际需求不符,你可以展开 数据类型 列的下拉列表,从中选择你需要的基本数据类型。 对于已经映射为类的子值,则不可变更其数据类型。例如:本例中元素<item>,已经映射为类Item,所以类Channel的属性Items,必须是Item类型的,不可变更。 点击 属性名称 列的"item"单元格手工变为Items,表示生成的实体类Channel中有一个List<Item> Items 属性。

5.点击 NEXT 跳转到 预览 页面。到了这个页面,你已能看到生成的实体类定义了。如果发现和预期的有所出入,可以点击之前的页签,重新进行配制。

预览页面有几个可配置项,分别说一下:

贫血模式 生成的实体类中,只包含属性。实体类与Xml的转换函数在其它类中实现(“转换类名称”中指定的类)
充血模式 生成的实体类中,不仅包含属性,还包含实体类与Xml的转换函数
包/命名空间 实体类所属的命名空间
转换类名称 如果采用贫血模式,实体类与Xml的转换函数将实现在此处指定的类中。

6.保留默认配置,最后一次点 NEXT ,弹出 生成代码 页面。这个页面大家之前已经看过了,它包含三部分代码:

EntityDefine 实体类定义,如果为充血模式则还包含转换函数。
AssistFunction 包含二个辅助函数:LoadFromFile  SaveToFile。大家看一下调用方式,就知道成生的代码如何使用了。
Xml Entity Convert 实体对象与Xml转换函数(仅在贫血模式下才有内容)

小结

好了,终于写完了。总结一下大体流程就这几步:

1. 样本Xml页签中录入用于分析的Xml

2. 元素/子值页签用于调整配置Xml结构

3. 类名称页签用于指定类名称

4. 类属性页签用于指定类属性

5. 预览页签用于配置代码生成项

最后,说说不足:

1.生成的代码是基于Dom模型,不利于处理大文件(但多大算大呢?那得看硬件水平了,呵呵)

2.目前是测试版,功能上有限制,样本Xml大小限于2K,一次最多生成6个类

XML代码生成器——XMLFACTORY 简介(一)的更多相关文章

  1. XML代码生成器——XMLFACTORY 简介(四)

    XML代码生成器——XMLFACTORY 简介(四) 这一篇我们讲“类属性”页签的配置功能,您将了解到:如何为元素子值指定类属性的名称,数据类型,及容器类型. 如果,你没看过这个系列的第一篇文章,请先 ...

  2. XML代码生成器——XMLFACTORY 简介(三)

    XML代码生成器——XMLFACTORY 简介(三) 这一篇我们讲“类名称”页签 的配置功能,您将了解到:如何为Xml元素指定对应的类名称及脱壳功能. 如果,你没看过这个系列的第一篇文章,请先去看这篇 ...

  3. XML代码生成器——XMLFACTORY 简介(二)

    XML代码生成器——XMLFACTORY 简介(二)      因为春节和项目上线的原因,离写上一篇文章的时间已经好久了. 不知道是事情太多了,还是自已效率太低了.总之是时间不够用. 哎,苦逼的程序员 ...

  4. XML.01-语法简介

    body,td { font-family: calibri; font-size: 10pt }   XML.01-语法简介 文档声明 元素(标签) 属性 注释 特殊字符 CDATA区域 处理指令 ...

  5. 2016 - 1 - 23 xml解析 -- 语法简介

    一: XML的概念 1. 一种可拓展标记语言 2. 与json一样,也是一种常用的数据交互格式 3. 一般也叫XML文档---XML Document 二: XML语法   1.一个完整的XML文档一 ...

  6. XML语言1.简介和语法

    一.什么是XML语言? XML 指可扩展标记语言(Extensible Markup Language) Xml是独立于软件和硬件的信息传输工具. XML 是一种很像HTML的标记语言. 但xml不是 ...

  7. XML解析技术简介——(一)

  8. XML与DTD简介

    (详细学习参考)https://blog.csdn.net/u013087513/article/details/52745509 XML约束之DTD的使用 (1)为什么要有约束? XML都是用户自定 ...

  9. iOS开发——网络篇——JSON和XML,NSJSONSerialization ,NSXMLParser(XML解析器),NSXMLParserDelegate,MJExtension (字典转模型),GDataXML(三方框架解析XML)

    一.JSON 1.JSON简介什么是JSONJSON是一种轻量级的数据格式,一般用于数据交互服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典 ...

随机推荐

  1. ElasticSearch配置说明

    配置文件位于%ES_HOME%/config/elasticsearch.yml文件中. cluster.name: elasticsearch 配置集群名称,默认elasticsearch node ...

  2. How to Develop blade and soul Skills

    How to Develop Skills Each skill can be improved for variation effects. Some will boost more strengt ...

  3. blade and soul pvp guide

    PvP PvP in Blade and Soul is categorized into two types, a personal PvP called Arena and a large-sca ...

  4. C# 图片的裁剪,两个图片合成一个图片

    图片的裁剪,两个图片合成一个图片(这是从网上摘的) /// <summary>         /// 图片裁剪,生成新图,保存在同一目录下,名字加_new,格式1.png  新图1_ne ...

  5. js判断qq浏览器

    if(navigator.userAgent.toLowerCase().toString().indexOf('qqbrowser') > -1){ console.log('qq');}el ...

  6. Visual Studio 2015中快捷键总结

    今天总结了Visual Studio工具中常用的快捷键,可供平时参考查阅. 程序调试相关的快捷键F5: 启动调试Ctrl+F5: 开始执行(不调试)Shift+F5: 停止调试Ctrl+Shift+F ...

  7. 小游戏Item表

    [Config]1|0|我|1|10|500|0|8|2|4|b5222d10-55a7-4789-8541-8e7430345d54|0|0[Config] [Config]2|1|公主|1|0|5 ...

  8. 394. Decode String

    [题目] Total Accepted: 10087 Total Submissions: 25510 Difficulty: Medium Contributors: Admin Given an ...

  9. python学习——如何判断输入是数字

    笨办法学python第35节 该节主要是讲分支与函数,主要遇到的问题是python中如何判断输入是数字. 首先原代码如下: from sys import exit def gold_room(): ...

  10. SQLite常用函数

    length(column_name) 取得相应栏位的长度 substr(column_name, start, length) 截取某个栏位相应长度的值