DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML基礎 >> 在.NET Framework中輕松處理XML數據(四)
在.NET Framework中輕松處理XML數據(四)
編輯:XML基礎     
XmlTextWriter類

用在本節中的方法創建XML文檔顯然並不困難。多年以來,開發者都是通過在緩存在連接一些字符串,連接好以後再把緩存中字符串輸出到文件的方式來創建XML文檔。但是以這種方式創建XML文檔的方法只有在你保證字符串中不存在任何細小的錯誤的時候才有效。.NET Framework通過用XMLwriter提供了更好的創建XML文檔的方法。

XML Writer類以只前(forward-only)的方式輸出XML數據到流或者文件中。更重要的是,XML Writer在設計時就保證所有的XML數據都符合W3C XML 1.0推薦規范,你甚至不用擔心忘記寫閉標簽,因為XML Writer會幫你寫。XmlWriter是所有 XML writer的抽象基類。.NET Framework只提供唯一的一個writer 類----XmlTextWriter類。

我們先來看看XML writers和舊的writers的不同點,下面的代碼保存了一個string型的數組:

StringBuilder sb = new StringBuilder("");

sb.Append("");

foreach(string s in theArray) {

sb.Append("
sb.Append(s);

sb.Append("\\\\\\\\"/>");

}

sb.Append("");

代碼通過循環取出數據中的元素,寫好標簽文本並把它們累加到一個string中。代碼保證輸出的內容是格式良好的並且注意了新行的縮進,及支持命名空間。當創建的文檔結構比較簡單時,這種方法可能不會有錯誤。然而,當你要支持處理指令,命名空間,縮進,格式化以及實體的時候,代碼的數量就成指數級增長,出錯的可能性也隨之增長。

XML writer寫方法功能對應每個可能的XML節點類型,它使創建xml文檔的過程更符合邏輯、更少的信賴於繁瑣的標記語言。圖六演示了怎麼樣用XmlTextWriter類的方法來連接一個string數據。代碼很簡潔,用XML writer的代碼更容易讀、結構更好。

Figure 6 Serializing a String Array

void CreateXmlFileUsingWriters(String[] theArray, string filename)

{

// Open the XML writer (用默認的字符集)

XmlTextWriter xmlw = new XmlTextWriter(filename, null);

xmlw.Formatting = Formatting.Indented;

 

xmlw.WriteStartDocument();

xmlw.WriteStartElement("array");

foreach(string s in theArray)

{

xmlw.WriteStartElement("element");

xmlw.WriteAttributeString("value", s);

xmlw.WriteEndElement();

}

xmlw.WriteEndDocument();

 

// Close the writer

xmlw.Close();

}

然而XML writer並不是魔術師----它不能修復輸入的錯誤。XML writer不會檢查元素名和屬性名是否有效,也不保證被用的任何的Unicode字符集適合當前架構的編碼集。如上所述,為了避免輸出錯誤,必須要杜絕非XML字符。但是writer沒有提供這種方法。

另外,當創建一個屬性節點時,Writer不會檢驗屬性節點的名稱是否與已存在的元素節點的名稱相同。最後,XmlWriter類不是一個帶驗證的Writer類,也不保證輸出是否符合schema或者DTD。在.NET Framework中帶驗證的writer類目前來說還沒有提供。但是在我寫的《Applied XML Programming for Microsoft .NET (Microsoft Press?, 2002)》書中,我自己寫了一個帶驗證的Writer組件。你可以到下面的網址去下載源碼:http://www.microsoft.com/MSPress/books/6235.asp.

圖七列出了XML writer的一些狀態值(state)。這些值都源於WriteState枚舉類。當你創建一個Writer,它的初始狀態為Start,表示你將要配置該對象,實際上writer沒有開始。下一個狀態是Prolog,該狀態是當你調用WriteStartDocument方法開始工作的時候設置的。然後,狀態的轉換就取決於你的寫的文檔及文檔的內容了。Prolog狀態一直保留到當你增加一個非元素節點時,例如注釋元素,處理指令及文檔類型。當第一個節點也就是根節點寫完後,狀態就變為Element。當你調用WriterStartAtribute方法時狀態轉換為Attribute,而不是當你調用WriteAtributeString方法寫屬性時轉換為該狀態。如果那樣的話,狀態應該是Element。當你寫一個閉標簽(>)時,狀態會轉換成Content。當你寫完文檔後,調用WriteEndDocument方法,狀態就會返回為Start,直到你開始寫另一個文檔或者把Writer關掉。

Figure 7 States for XML Writer

State
Description

Attribute
The writer enters this state when an attribute is being written

Closed
The Close method has been called and the writer is no longer available for writing operations

Content
The writer enters this state when the content of a node is

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved