基本原理:
.NET框架中包含了一个专门用于处理XML的命名空间-System.Xml,其中包含了相当多的与XML相关的类。其子命名空间包括:System.Xml.Serialization,System.Xml.Schema,System.Xml.XPath,System.Xml.Xsl,这些子命名空间包含了与XML相关的更具体的类。其中的System.Xml和System.Xml.Xsl正是开发人员完成数据类型转化并以特定格式将数据呈现给最终用户所必须的命名空间,前者包括的XmlDataDocument类能从ADO.NET中的DataSet对象获取关系型数据并以XML的格式存储之,同时它是XmlDocument类的一个子类,所以是基于文档对象模型(DOM)的。而后者所包括的XslTransform类是完成XSLT转换的重要类,该类可以根据一个XmlDataDocument对象以及一个相应的XSLT文件完成XML数据格式的转换,也即它能将XML数据以HTML的方式显示出来,这样就达到了以特定格式将XML数据呈现给最终用户的目的了。
关系型数据转化为XML数据的过程中,我们运用了一个XmlDataDocument对象从DataSet对象中获取数据,其实这个过程是将XmlDataDocument对象和DataSet对象同步化的过程。一旦这两个对象被同步化了,那么对于任何一个对象的数据操作都会在另一个对象中反映出来。这样开发人员就可以同时运用XSLT技术以及ADO.NET相关的技术访问并操作数据了。同步化这两个对象的方法一般包括以下三种:
1. 首先将一个XML文档导入到一个XmlDataDocument对象中,然后访问其DataSet属性。值得注意的是,在运用XmlDataDocument对象访问数据前必须设置好DataSet属性的模式,同时将数据表和列分别匹配到XML中相应的元素上。还有,模式是大小写敏感的。
2. 先创建一个带有模式的DataSet对象,然后将一个XML文档直接导入到一个XmlDataDocument对象中并使之与前面的DataSet对象同步化。这种方式适合于XML文档非常大的情况,但是只要你把它和DataSet对象中的关系视图同步化,其中的元素也就和DataSet对象中的模式相对应起来了。
3. 最简单的方法!根据一个已有的DataSet对象创建一个全新的XmlDataDocument对象。基本代码如下:
| DataSet ds = new DataSet(); // 在此包含填充DataSet对象的代码 XmlDataDocument xmldd = new XmlDataDocument(ds); |
实例介绍
下面我向大家介绍一个示例性的ASP.NET Web应用程序,该程序能从SQL Server 2000中的Northwind数据库中获取关系型数据并填充到一个DataSet对象中。该Web应用程序使用上面介绍的第三种方法同步化DataSet对象和XmlDataDocument对象,以完成从关系型数据到XML数据的转化工作。最后该Web应用程序根据一个预先编写好的XSLT文件实现从XML格式到HTML格式的数据转换,其中运用到的主要类便是XslTransform类。所以总体来看该Web应用程序并不复杂,不过它良好地体现了.NET框架下不同数据类型的转化方法和技巧,值得大家学习。
首先打开Visual Studio.Net,创建一个Visual C#的ASP.NET Web应用程序,如图1所示:
图1
接着从SQL Server 2000的Northwind数据库中获取数据并填充到一个DataSet对象中。Northwind数据库中包含了一个Suppliers表和一个Products表,它们之间存在着一对多的关系,该关系以两个表中的SupplierID列为关联键。该关系能显示每个供应商所能供应的所有产品列表,假设该Web应用程序就是要显示这些信息,那么下面就是获取DataSet对象的方法了。