XML与DataSet的互转(2)--XmlSchema的作用

前端之家收集整理的这篇文章主要介绍了XML与DataSet的互转(2)--XmlSchema的作用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

终于迎来了五一长假,总算可以好好休息一下了。不过这个假期对我而言也没什么意思,头三天除了睡觉还是睡觉,第四天就又要去公司加班了。
好了,也终于可以继续我的Blog了。久违了,My Friend!

上一节提到了几个问题:
1、当在数据表中的某个字段为空值(即为null,而并非为"")时,其根本不会显示在XML上,这就造成了当需要对XML进行数据绑定的时候,根本无法找到该字段。该如何解决
2、无论我们在数据库中存放的表是什么名字,在XML的显示中一律依次用<Table />、<Table1 />来代替,如何通过表名称来找呢?
3、在XML中所有的数据都是String类型的,不管是数字还是时间。如何让Xml中的数据类型与DataSet中的一样?

好,现在开始讲解Schema。我们可以通过DataSet.GetXmlSchema()来得到DataSet的Schema。当然,该方法还是用来生成String这符串的。我们首先来看一下它的格式。
假如有如下表:
表Test,其字段描述如下:
ID(string)Name(string)time(DateTime)
1aa2004-5-1
2bb

其DataSet的Xml格式如下:
<?xml version="1.0" encoding="utf-16"?>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="
http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:Locale="zh-CN">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="test">
<xs:complexType>
<xs:sequence>
<xs:element name="ID" type="xs:string" minOccurs="0" />
<xs:element name="Name" type="xs:string" minOccurs="0" />
<xs:element name="time" type="xs:dateTime" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>

至于Schema的写法,我就不多说了,不清楚的朋友可以找一本Xml的基础资料来看一下。这里我们重点要看红色标注的一行,里属性type就是用来表示在Xml中该字段的数据类型。其它属性还包含字段的限制等等。实际上,XmlSchema的作用就在于此。同时,即便在Xml中字段为空时不显示,通过XmlSchema也可以得到完整的数据字段。还有一点,就是表名,你同时也可以看到在XmlSchema中有与Xml中对应的表名,这里看到的为test。 好,讲到这里,我想你已经大概了解DataSet转为Xml的一些基础知识了。那么现在我再来讲一下Xml还原成DataSet的方法。 DataSet已经很好的支持了Xml。这一点我在开发过程中感受得非常深刻。DataSet通过客户端是不能够提取的,因此我先转成Xml,然后通过客户端的MSXML进行DOM解析,真的是非常棒哦。有空你也可以试一下它的强大功能。 Xml转成DataSet主要用DataSet.ReadXmlSchema()和DataSet.ReadXml()方法。注意这里,我们通过DataSet获取时,如果要获取Schame,那么写一定要先将DataSet.ReadXmlSchema()写在前面,因为DataSet只有首先得到数据架构,才能在架构中添加数据哦(想想建筑师们是怎么设计的吧)! 再说一句题外话,不知道你是否清楚DiffGram的作用。在DataSet.GetXml()方法中,会有第二个参数是用来设置Get方法。里面最有作用的就是DiffGram参数。它可以完整保存DataSet中的信息。加入该参数,你再观察一下DataSet生成的Xml,会发现从获取DataSet到对DataSet的记录操作变更全部都记录在Xml中了,这就是DiffGram的功劳。这样,即便我们把DataSet以Xml的方法传递到任何其它层,都可以进行有效的更新或还原了。

猜你在找的XML相关文章