这一篇我们讲“类名称”页签 的配置功能,您将了解到:如何为Xml元素指定对应的类名称及脱壳功能。

    如果,你没看过这个系列的第一篇文章,请先去看这篇文章,否则你指定看不懂这篇。 XML代码生成器——XMLFACTORY 简介(一)

脱壳功能十分强大,所提供的灵活性,足以媲美手写代码。先看样本XML:

  <Student>
    <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代码生成器的脱壳功能比较强大,不只可以脱一层壳,而是可以脱去好几层的壳,直到暴露出核心的数据。看下面这个例子。

技术分享
  <table>
    <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