現對該方法的執行過程進行說明。
首先是創建一個XmlDocument對象 ,XmlDocument創建時是一個空的XML文檔,沒有任何內容,沒有根元素,因此第一步就是使 用文檔對象的AppendChild方法來添加根元素。在這裡我們使用了文檔對象的CreateElement 函數來創建一個名為Table的XMLElement元素對象。
各種類型的XML文檔對象,包括元 素,屬性,文本塊,注釋等等,都不能直接實例化,只能使用XmlDocument的一系列以Create 開頭的函數來創建對象實例。創建的XML文檔對象是一個個離散的對象,必須及時的添加到 XML文檔對象結構中才能真正成為XML文檔的一部分。一般的使用XML文檔對象或元素對象的 AppendChild方法將新創建的XML文檔對象添加到指定對象下面,如此才加入了XML文檔結構的 大家庭中。
這種處理模式類似向DataTable添加新的數據行。DataRow本身不能直接實 例化,我們首先得使用DataTable 的NewRow創建一個新的DataRow,然後使用DataTable的 Rows屬性的Add方法向數據表添加剛剛創建的數據行。
初始化一個XML文檔對象後,我 們連接數據庫,查詢數據庫獲得一個數據讀取器,然後遍歷查詢所得的數據庫記錄,輸出XML 文檔。
對每一個數據庫記錄,首先創建一個RecordElement對象,添加到XML文檔的根 節點下,然後遍歷數據庫記錄的每一個字段值,創建一個FIEldElement對象並添加到 RecordElement下面,若當前數據庫字段值為空,則調用FieldElement的SetAttribute 方法 ,設置名為Null的屬性值為1,否則向FIEldElement添加一個XML文本節點。
完成生成 XML文檔後,我們就向頁面輸出XML文檔的內容,若頁面參數中指定了XSLT轉換文檔名稱則執 行XSLT轉換,並輸出轉換結果。關於XSLT下節課程將詳細說明。
若未指明XSLT轉換信 息,則輸出XML文檔根節點的外圍XML字符串。
每一個XML文檔對象都具有InnerXml屬 性和OuterXml屬性,這兩個屬性都直接返回表示該XML文檔片斷的不帶縮進的XML字符串,但 兩者有差別。InnerXml返回表示該節點所有子孫節點的XML字符串。而OuterXml返回表示該節 點本身和所有子孫節點的XML字符串。例如對於XML文檔”<a><b />123</a>”,則它的根節點的InnerXml就是”<b />123” ,而它的根節點的OuterXml就是”<a><b />123</a>”。注意 這個字符串是不帶縮進的。而XML文檔直接保存到指定名稱的文件中是帶縮進的。
在 IE浏覽器中查看該頁面,可以看到IE只是顯示XML文檔中的純文本內容,並不像顯示其他XML 文檔時的那種帶縮進的顯示。這是因為該ASPX的代碼中沒有設置ContentType為XML格式,而 是使用默認的HTML格式,因此IE浏覽器接受該頁面文檔代碼,並把它當作HTML進行解析和顯 示,由於Table,Record等XML名稱都不是Html標簽,因此IE浏覽器忽略掉這些XML標記,只顯 示出其中的純文本內容。但你查看該頁面的源代碼,可以看出該文檔的內容仍然是標准的XML 格式,這裡的源代碼沒有縮進處理。
小結
在本課程中,我們簡單介紹了XML 的基本語法,說明了處理XML文檔的流式處理模式和DOM處理模式。還使用C#演示了輸出XML文 檔。
XML是一項不簡單的技術,而且在其上面派生了很多其他的技術,作為當代的軟 件開發人員,尤其是web開發人員,應當熟練掌握和使用XML技術及其某些派生技術,熟悉XML 技術有助於開發者長期保持相當水平的軟件開發能力,也是學習其他先進生產力的重要基礎 。大家應當好好學習XML技術。