?。矍把裕軽ML技術是微軟.NET戰略的一個重要基礎,其在.NET開發中的作用自然是不言而喻的。隨著XML Web服務的日益發展以及各種異構平臺下數據交換的需求日益增加,XML逐漸在成為數據存儲的一種重要方式。然而目前更多的數據是以關系型數據的方式存在的,這樣將關系型數據轉化為XML數據并進而呈現給最終用戶成了開發人員的一項主要工作。.NET不僅以XML為基礎,而且對XML標準有十分完美的支持。在.NET開發環境下,開發人員只要以很小的代價就可以達到數據類型轉化并將數據以特定格式呈現給最終用戶的目的。
基本原理:
.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對象?;敬a如下:
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對象的方法了。
private DataSet GetDataSet() // 打開連接,并用上面的兩個SqlDataAdapter對象填充DataSet對象,最后關閉連接 // 在DataSet對象中添加必要的關系,該關系是一對多類型的 // 返回DataSet對象 |
上面的代碼能將Northwind數據庫中的Suppliers表和Products表的數據運用SqlDataAdapter對象的Fill()方法填充到一個DataSet對象中,然后在這兩個數據表之間根據每個表中的SupplierID列建立一個一對多關系。
現在,你已經從后臺數據庫中獲取數據并填充到DataSet對象了,不過要根據DataSet對象格式化輸出結果是比較困難的,除非你使用像DataGrid那樣的數據綁定控件。然而使用該類控件將使得輸出結果的顯示方式不富于變化,那也就可能不能滿足應用程序的需求了。于是,你得先將數據格式轉化為XML格式并運用XSLT技術將數據以HTML的方式顯示給最終用戶。所以,下面先得創建一個XSLT樣式表文件。為該項目添加一個新項,如圖2所示:
圖2
樣式表文件自身就是一個XML文件,其中包含了一個或多個XSLT模板。這些模板能根據其中的指令對源XML文件中的元素進行逐個處理并生成相應結果。編輯該樣式表文件如下:
<?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="SuppliersProductsDS"> <HTML> <HEAD> <TITLE>XmlDataDocument Transformation!</TITLE> </HEAD> <STYLE> BODY{ font-family:verdana;font-size:9pt } TD { font-size:8pt } </STYLE> <BODY> <xsl:apply-templates select="Suppliers"></xsl:apply-templates> </BODY> </HTML> </xsl:template> <xsl:template match="Suppliers"> <TABLE> <TR><TD> <B> <xsl:value-of select="CompanyName"></xsl:value-of> <xsl:value-of select="Phone"></xsl:value-of> </B> </TD></TR> </TABLE> <xsl:apply-templates select="Products"></xsl:apply-templates> <BR></BR> </xsl:template> <xsl:template match="Products"> <TABLE BORDER="1"> <TR> <TD valign="top" bgcolor="#E0E0E0"> <B>Product:</B> </TD> <TD valign="top"> <xsl:value-of select="ProductName"></xsl:value-of> </TD> </TR> <TR> <TD valign="top" bgcolor="#E0E0E0"> <B>QuantityPerUnit:</B> </TD> <TD valign="top"> <xsl:value-of select="QuantityPerUnit"></xsl:value-of> </TD> </TR> <TR> <TD valign="top" bgcolor="#E0E0E0"> <B>UnitPrice:</B> </TD> <TD valign="top"> <xsl:value-of select="UnitPrice"></xsl:value-of> </TD> </TR> </TABLE> </xsl:template> </xsl:stylesheet> |
最后便是根據上面創建并填充的DataSet對象創建一個新的XmlDataDocument對象,然后根據樣式表文件將XML數據轉換為HTML格式的數據并呈現給最終用戶。XSLT轉換過程涉及到三個文件:一個為源XML文件,它是被處理的對象;一個樣式表文件,它是XSLT轉換的工具;還有一個就是輸出結果文件。XSLT轉換過程運用到了XslTransform類的Load()方法和Transform()方法,其作用分別是導入樣式表和進行實際的轉換。下面,添加Web頁面的Load事件響應函數如下:
private void Page_Load(object sender, System.EventArgs e) // 創建一個XslTranform對象并導入XSLT樣式表文件 // 進行XSLT轉換并輸出結果到一個流對象 // 顯示輸出結果 |
運行該Web應用程序的結果如圖3所示:
圖3
總結
以上我向大家闡述了.NET框架下數據類型轉化的基本方法和技巧,其中的Web應用程序從后臺數據庫中獲取了關系型的數據并根據DataSet對象和XmlDataDocument對象的同步化原理將數據轉化為了XML類型的數據,最后它還運用到了XSLT技術將XML數據以HTML的格式呈現給最終用戶,所以該實例良好地體現了.NET框架下與數據轉化相關的技術,不失為一個好例子。最后,希望本文能對大家有不少幫助!
原文轉自:http://www.anti-gravitydesign.com