XML代码生成器——XMLFACTORY 简介(三)
这一篇我们讲“类名称”页签 的配置功能,您将了解到:如何为Xml元素指定对应的类名称及脱壳功能。
如果,你没看过这个系列的第一篇文章,请先去看这篇文章,否则你指定看不懂这篇。 XML代码生成器——XMLFACTORY 简介(一)
脱壳功能十分强大,所提供的灵活性,足以媲美手写代码。先看样本XML:
<Name>小雷</Name>
<Birthday>1982-06-29</Birthday>
<Education School="清华大学" Major="计算机"/>
</Student>
打开页面:http://www.codingfactory.net/Page/XmlFactory/client/XmlFactory_Flex.html
把上面的XML粘到样本XML中,点“NEXT”直到显示“类名称”页签;如下图所示:
注意红色方框圈中的地方,我们分别按照A,B两种不同方案进行操作,请比对生成的实体类
A方案 | B方案 |
---|---|
把文本Education改成Educ 点击“NEXT”直到弹出“生成代码”页面 |
把Education删去 点击“NEXT”直到弹出“生成代码”页面 |
public class Student
{ public String Name{ get; set; } public DateTime Birthday{ get; set; } public Educ Education{ get; set; } } public class Educ { public String School{ get; set; } public String Major{ get; set; } } |
public class Student
{ public String Name{ get; set; } public DateTime Birthday{ get; set; } public String EducationSchool{ get; set; } public String EducationMajor{ get; set; } } |
A方案很好理解,把元素<Education>映射为实体类Educ;而B方案并没有为元素<Education>生成对应的实体类,但是元素<Education>所包函的信息:School,Marjor并没有被忽略,而是映射成为了Student类的属性。
如果你打算把Student的信息存到数据库里(用一张表,而不是二张表),我想B方案生成的实体类更方便一些。我们把B方案的操作称作“脱壳”操作。因为没有为<Education>这个“壳”生成实体类,但却保留了School,Major这样的“核”。所以称为“脱壳”。脱壳操作虽然没有为元素<Education>定义类,但当你把Student类对象序列化为Xml时,成生的Xml仍然包函<Education>元素,所以你不用担心脱壳后生成的Xml结构有变化。
XmlFactory代码生成器的脱壳功能比较强大,不只可以脱一层壳,而是可以脱去好几层的壳,直到暴露出核心的数据。看下面这个例子。
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td>4</td>
<td>5</td>
<td>6</td>
</tr>
</table>
很明显,唯一有价值的数据是元素<td>中的值。以下A,B形式,你想要那种实体类呢?
A形式 | B形式 |
---|---|
public class Table
{ public List<List<Int32>> Trtd{ get; set; } } //说明一下 //table.Trtd[0][0]的值是1 //table.Trtd[0][1]的值是2 //table.Trtd[1][2]的值是6 |
public class Table
{ public List<Tr> Tr{ get; set; } } public class Tr { public List<Td> Td{ get; set; } } public class Td { public Int32 Value{ get; set; } } |
如果你需要A形式的实体类,那就粘贴上面的Xml到“样本Xml”中,然后,一直点"Next"按钮,直到弹出“生成代码”页面。如果你需要B形式的实体类,请在“类名称”列中,填写:Tr Td。如下图:
最后声明一下:不是所有元素,都可以进行脱壳操作。什么情况下可以进行脱壳操作呢?我只能简单的说“类名称”页签中,第二,第三个表格中的元素,都可以进行脱壳;而第一个表格中的元素必须映射为类。至于为什么,我就不展开了,有兴趣的朋友,可参考官方文档中“脱壳定义及规则”章节。http://www.codingfactory.net/Page/XmlFactory/Help/help_cn.htm