第10章XML序列化.doc
文本预览下载声明
面向.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){
显示全部