C#发现之旅第三讲 使用C#开发基于XSLT的代码生成器(2)

豆豆网   技术应用频道   2008年05月29日  【字号: 收藏本文

内容摘要:在未来的C#发现之旅中,我们按照由浅入深,循序渐进的步骤,一起探索和发现C#的其他未知的领域,更深入的理解和掌握使用C#进行软件开发,拓宽我们的视野,增强我们的软件开发综合能力。

  本文示例源代码或素材下载

  在本演示程序中,我们只是用程序目录下的一个Access2000数据库作为例子,因此也只调用了LoadFromAccesss2000这个函数,其他的分析SQLSERVER和ORACLE的函数没用到。在未来当这个代码生成器经过改善而投入实际应用时,它就能分析SQLSERVER和ORACLE等企业级数据库了。

  在主页面xslcreatecode.aspx中定义了一个GetXMLString函数,它能将一个对象序列化成一个XML文档。这里的DataBaseInfo,TableInfo和FieldInfo都能XML序列化。在执行XML序列化时,系统会分析对象类型,遍历对象所有的公开字段和可读写属性,然后将这些属性值输出到XML文档,若遇到对象树状结构,则会递归遍历这个树状结构,对对象中的每一个下属对象都会建立一个XML子元素进行输出。在这里DataBaseInfo,TableInfo和FieldInfo构成了三层的树状结构,因此生成的XML文档也是多层次的。

  一般来说,序列化生成的XML文档中,XML元素的名称等于对象类型的名称和公开字段属性的名称,但可以通过添加特性来改变这种默认行为,在类型TableInfo的定义前面加上了特性XmlType,在这里指明了为类型TableInfo生成的XML元素名称不是对象类型名称TableInfo,而是Table。

[System.Xml.Serialization.XmlType("Table")]
public class TableInfo

  同样的方式,我们为类型FieldInfo指定了XML元素名称为Field,这里展示了特性在C#中的应用。关于特性在未来的某节课程中将讲到。

  由于能执行XML序列化的属性必须是可读写的,因此在类型FieldInfo中的IsString,IsInteger等属性为了能执行XML序列化,因此定义了毫无作用的set方法。

  XSLT模板说明

  程序目录下放置了一些以下划线开头的扩展名为XSLT的文件,这就是代码生成器使用的代码生成模板。在主界面中使用不同的模板就能生成不同的代码。在这里我们以_cshaprhashtable.xslt为例子进行说明。

来源:cnblogs    作者:袁永福    责编:豆豆技术应用

正在加载评论...