基于C#语言的类与XML转化的研究与分析

2022-10-07

1 XML与类

扩展标记语言XML定义了一种文件格式, 这种文件是可自定义标记的简单文本, 虽然是简单的文本, 但它是数据保存、传输与交换的通用方法。看下面的XML文件:

首先, 这个文件具有HTML编写的网页的所有功能, 可以利用HTTP协议在互连网上传输, 通过CSS或XSL在浏览器中显示。H T M L本来就是X M L的子集。

其次, 我们可以把这个文件与一个数据库表对应, 根元素studentlist可作为数据表名, 其中的每个student为表中的记录, 子元素id、name是字段。

从前面的分析中我们看到类与XML之间的对应关系, 可以用XML文档表示一个对象的内容, 也可以用类的对象表示XML文档中的信息。将一个类的对象转化为XML文档, 能够将对象中封装的信息在网络上传输, 或者利用XML文件与数据库表之间的关系, 将信息序列化到数据库中保存。将XML文档转化为一个类的对象, 能够利用类的功能对XML中的数据进处理, 或在需要时, 将接收或预先保存的类信息进行还原。

2 类转化为XML的方法与实现

将类的实例转化为XML文档最重要的方法是Serialize和Deserialize方法, Serialize方法用于将类实例转化为XML文档, Deserialize方法用于将XML文档转化为类实例。具体步骤如下。

(1) 创建待转化的类实例, 并设置它的公共属性和字段。

(2) 以待转化类的类型为参数, 创建Xml Serializer类的实例。

(3) 以保存转化后XML的文件为参数, 创建流对象 (例如Stream、Text Writer或Xml Writer) 。

(4) 调用Serialize方法将对象转换为XML文档, 传递的参数是流对象与待转化的对象。

待转化对象的类中必须有一个默认构造函数, 转化后的XML文档只包含数据本身以及类的结构, 不包括类型标识和程序集信息, 只能转化公共属性和字段, 不转换方法、索引器、私有字段或只读属性 (只读集合除外) 。方法是对数据的操作, 不包含数据信息, 一般没必要进行传输和序列化。对于私有数据, 因对象被转化之后, 数据存储为XML文件, 或存储在其他数据存储区, 如果其他进程可以访问到您的数据存储区, 或是可以在Intranet或Internet上看到该数据存储区, 数据就可能被窃取, 并被恶意使用, 所以为保证重要数据的私有性, 不对私有字段进行转化。

Xml Serializer类在将对象转化为XML时提供了完整而灵活的控制, 指定应将字段或特性 (Property) 编码为XML的元素还是属性 (Attribute) ;指定要使用的XML命名空间;如果字段或特性名不合适, 则指定元素或属性的名称。这些控制功能是由.NET类库中一些预定义的属性 (Attribute, 注意不要与特性和XML中的属性混淆) 提供的。

通过使用属性定制, 或者使用另外一个专用的组件S o a p (在S y s t e m.R u n t i m e.Serialization.Formatters.Soap.dll中) , 一个类实例还可被转化成编码为SOAP (Simple Object Access Protocol) 的XML文档。关于这些转化的例程不再列出, 可参阅相关资料。

上面介绍了将对象 (类的实例) 转化为X M L的方法, 至于将类本身转化为X M L Schema, .NET为此提供了程序Xsd.exe, 使用此工具可以从类生成XML架构文档。操作过程是:将一个类或多个类编译为.exe文件或.dll文件。打开一个“命令提示符”窗口。将.exe文件或.dll文件作为参数传递给Xsd.exe。

3 XML转化为类的方法与实现

将XML文档转化为类分为两种情况, 如果有转化后类的类型信息, 且XML数据与类型定义匹配, 或者XML文档是原类的实例转化而来的, 转化过程与将类转化为XML的过程类似。

(1) 以转化后类的类型为参数, 创建Xml Serializer类的实例。

(2) 以XML的文件为参数, 创建流对象 (例如Stream、Text Writer或XML Writer) 。

(3) 创建待转化的类实例。

(4) 调用Deserialize方法将XML文档转换为对象, 传递的参数是流对象。

在反序列化时, 必须将返回的对象强制转换为原始对象的类型, 如上例中对Deserialize方法返回的值进行Student List类型的转化。如果待转化的XML文档不是由类实例转化而来, 或者没有XML文档转化后类的类型信息, 则从架构文件生成要转化的类。没有相应的架构文件时, 可从XML文件生成架构文件, 然后用此架构生成相应的类。由架构生成类的方法, 也是使用Xsd.exe程序, 将XML架构作为参数传递该程序, 例如:xsd Students.xsd。根据需要, 可用方法、属性或字段修改这些类, 然后用上面的过程将XML转化为类。

4 结语

XML的出现是计算机软件领域中具有重大意义的事件, 它的特点是简单、灵活、可扩展、平台无关, 目前已应用于许多领域, 基本上成为网络上数据交换的通用语言。深入地分析XML文档, 这种简单的文本身兼三职, 具有Web page、数据库、类的功能, 几乎涵盖了软件领域中主要的内容。将类与XML相互转化比较复杂, 在C#语言中使用.NET类库的类与属性可以简化类与XML之间的转化, 这种转化过程是可定制的, 并且十分灵活。

摘要:XML文档虽然是一种简单的文本, 但它既可以作为网页文件使用, 又与数据库表和面向对象程序设计中的类及其对象相对应。XML与数据库表和XML与类的相互转化是计算机应用技术中的高级课题。文章阐述类与XML之间转化的方法和问题, 并用C#语言进行了具体的实现。

关键词:XML文档分析,类与XML的转化,C#语言编程

参考文献

[1] (美) Tom Archer, Andrew WhiteChapel著;马朝晖, 等译.C#技术揭秘[M].北京:机械工业出版社, 2003.

[2] (美) Joseph Mayo著;王启丁, 高锦文, 刘明, 等译.C#技术内幕[M].北京:机械工业出版社, 2003.

[3] 王震江.XML程序设计[M].北京:中国铁道出版社, 2006.

上一篇:举证责任倒置后精神科护理工作的难点与对策下一篇:人力资源管理在行政管理中的重要性探讨