人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

在.NET Framework中簡單處理XML數(shù)據(jù)(4-1)

在.NET Framework中簡單處理XML數(shù)據(jù)(4-1)

更新時間:2022-08-22 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

XmlTextWriter類

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

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

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

StringBuilder sb = new StringBuilder("");

sb.Append("");

foreach(string s in theArray) {

sb.Append("

sb.Append(s);

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

}

sb.Append("
");

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

XML writer寫方法功能對應(yīng)每個可能的XML節(jié)點類型,它使創(chuàng)建xml文檔的過程更符合邏輯、更少的信賴于繁瑣的標(biāo)記語言。圖六演示了怎么樣用XmlTextWriter類的方法來連接一個string數(shù)據(jù)。代碼很簡潔,用XML writer的代碼更容易讀、結(jié)構(gòu)更好。

Figure 6 Serializing a String Array

void CreateXmlFileUsingWriters(String[] theArray, string filename)

{

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

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并不是魔術(shù)師----它不能修復(fù)輸入的錯誤。XML writer不會檢查元素名和屬性名是否有效,也不保證被用的任何的Unicode字符集適合當(dāng)前架構(gòu)的編碼集。如上所述,為了避免輸出錯誤,必須要杜絕非XML字符。但是writer沒有提供這種方法。

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

圖七列出了XML writer的一些狀態(tài)值(state)。這些值都源于WriteState枚舉類。當(dāng)你創(chuàng)建一個Writer,它的初始狀態(tài)為Start,表示你將要配置該對象,實際上writer沒有開始。下一個狀態(tài)是Prolog,該狀態(tài)是當(dāng)你調(diào)用WriteStartDocument方法開始工作的時候設(shè)置的。然后,狀態(tài)的轉(zhuǎn)換就取決于你的寫的文檔及文檔的內(nèi)容了。Prolog狀態(tài)一直保留到當(dāng)你增加一個非元素節(jié)點時,例如注釋元素,處理指令及文檔類型。當(dāng)?shù)谝粋節(jié)點也就是根節(jié)點寫完后,狀態(tài)就變?yōu)镋lement。當(dāng)你調(diào)用WriterStartAtribute方法時狀態(tài)轉(zhuǎn)換為Attribute,而不是當(dāng)你調(diào)用WriteAtributeString方法寫屬性時轉(zhuǎn)換為該狀態(tài)。如果那樣的話,狀態(tài)應(yīng)該是Element。當(dāng)你寫一個閉標(biāo)簽(>)時,狀態(tài)會轉(zhuǎn)換成Content。當(dāng)你寫完文檔后,調(diào)用WriteEndDocument方法,狀態(tài)就會返回為Start,直到你開始寫另一個文檔或者把Writer關(guān)掉。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 永胜县| 中卫市| 方城县| 霍城县| 马尔康县| 平果县| 陵水| 迁西县| 鹤峰县| 兰溪市| 武川县| 微山县| 南和县| 珠海市| 封开县| 广宁县| 奈曼旗| 宜章县| 鄂伦春自治旗| 泸州市| 九龙城区| 肥西县| 麻栗坡县| 南丰县| 遵义县| 文水县| 商河县| 福安市| 什邡市| 宣汉县| 定日县| 延安市| 安康市| 吉首市| 安仁县| 抚远县| 沁水县| 盐山县| 房产| 元江| 大方县|