??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.
sb.Append(s);
sb.
sb. ');
}
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 wpterpmmoed ter(filename, null );
xmlw.Formatting = Formatting.Indented;
xmlw.WriteStartDocument();
xmlw.WriteStartElementforsm');
xmlw.WriteStartElement ('element');
xmlw.WriteAttributeString('value', s);
xmlw.WriteEndElement();
}
xmlw.WriteEndDo提供);
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關掉。
以上就是在.NET Framework中輕鬆處理XML資料(4-1) 的內容,更多相關內容請關注PHP中文網(www.php.cn)!