文档详情

第10章XML序列化.doc

发布:2017-04-17约2.65千字共3页下载文档
文本预览下载声明
面向.Net的XML程序设计 面向.Net的XML程序设计  PAGE 2  PAGE 3 XML序列化 什么是简单对象访问协议? Simple Object Access Protocol (SOAP),为信息交换定义了一种轻量级协议。部分 SOAP 规范为如何使用 XML 表示数据定义了一套规则。SOAP 规范的其他部分定义了一种可扩展消息格式、使用 SOAP 消息格式表示远程过程调用 (RPC) 的约定以及到 HTTP 协议的绑定。 在程序设计时,待处理的数据通常会保存在什么地方?各有什么特点? 两种保存方法:关系数据库和内存对象中。放在关系数据库中的数据可以被永久保存,但是读取数据库时会占用额外的系统资源;放在内存中的数据会在系统重起后丢失,但是相对保存在数据库中的处理手段,拥有更好的读取性能。 如何把关系数据库的数据转化为XML格式的文档,是使用XML序列化吗? 不使用XML序列化来把关系数据库数据转化为XML文档,一般使用相关的工具来完成,例如XML外接工具、SQL Server查询语句的FOR XML子句等。 如果没有XML序列化类的支持,能够把内存对象的数据保存为XML文档吗? 可以,例如使用第4章介绍的 XmlWriter 类,调用相应的方法手工把内存对象的数据写入XML文档,但是这种方法一定不如XML序列化简单易用。 XML序列化的功能不如二进制序列化,那么为什么还要使用呢? 100111010111000100011110010100111………二进制的结果对于计算机很简单,但是对于人类却很难读懂,XML的文档解决了这个问题,对计算机和对人类都有很好的可读性。 除了XSD.EXE之外,还有别的方法从XML实例文件创建对应的XSD架构文件吗?有何区别? 还可以使用Visual Studio .NET 集成开发环境完成此功能。相比之下,XSD.EXE没有图形化界面,但是使用直接;Visual Studio .NET 集成开发环境在图形化界面下完成这项工作,比较直观,但是需要掌握界面的使用方法。 请解释下述三条语句的功能 xsd.exe myschema.xsd /l:CS /c xsd.exe ExpenseReport.dll /type:ExpenseReport xsd.exe Books.xml 第一句:根据 myschema.xsd 架构文件创建C#语言的类声明,把结果输出到当前目录; 第二句:为 ExpenseReport.dll 中的 ExpenseReport 类生成对应的XSD架构文件,把结果输出到当前目录; 第三句:根据 Books.xml 文档创建对应的XSD架构文件,把结果输出到当前目录。 类可以进行序列化吗?如何完成? 类可以进行序列化,使用XSD.EXE命令行工具完成,不需要编程;对象序列化则不能用XSD.EXE命令行工具完成,应该使用相关的序列化类。 编写代码序列化数据集对象DataSet。 下段代码是使用C#编写的答案,更加完整和详细的答案请参考MSDN中“XML序列化的示例”部分: private void SerializeDataSet(string filename){ XmlSerializer ser = new XmlSerializer(typeof(DataSet)); // Creates a DataSet; adds a table, column, and ten rows. DataSet ds = new DataSet(myDataSet); DataTable t = new DataTable(table1); DataColumn c = new DataColumn(thing); t.Columns.Add(c); ds.Tables.Add(t); DataRow r; for(int i = 0; i10;i++){ r = t.NewRow(); r[0] = Thing + i; t.Rows.Add(r); } TextWriter writer = new StreamWriter(filename); ser.Serialize(writer, ds); writer.Close(); } 编写代码序列化 XmlElement 和 XmlNode 下段代码是使用C#编写的答案,更加完整和详细的答案请参考MSDN中“XML序列化的示例”部分: private void SerializeElement(string filename){
显示全部
相似文档