明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

在.NET Framework中簡(jiǎn)單處理XML數(shù)據(jù)(5-2)

[摘要]圖十二所示的代碼演示了客戶端用XmlTextReadWriter類在讀操作的同時(shí)修改屬性值的優(yōu)勢(shì)。在本期的msdn中提供了XmlTextReadWriter類的C#和VB源代碼下載(見(jiàn)本文開(kāi)頭提供的鏈接)。 Figure 12 Changing Attribute Values private...
圖十二所示的代碼演示了客戶端用XmlTextReadWriter類在讀操作的同時(shí)修改屬性值的優(yōu)勢(shì)。在本期的msdn中提供了XmlTextReadWriter類的C#和VB源代碼下載(見(jiàn)本文開(kāi)頭提供的鏈接)。
Figure 12 Changing Attribute Values

private void ApplyChanges(string nodeName, string attribName,

string oldVal, string newVal)

{

XmlTextReadWriter rw = new XmlTextReadWriter(InputFileName.Text,

OutputFileName.Text);

rw.WriteStartDocument(true, CommentText.Text);



// 手工修改根節(jié)點(diǎn)

rw.Writer.WriteStartElement(rw.Reader.LocalName);



// 開(kāi)始修改屬性

// (可以修改更多節(jié)點(diǎn)的屬性)

rw.AddAttributeChange(nodeName, attribName, oldVal, newVal);



// 循環(huán)處理文檔

while(rw.Read())

{

switch(rw.NodeType)

{

case XmlNodeType.Element:

rw.Writer.WriteStartElement(rw.Reader.LocalName);

if (nodeName == rw.Reader.LocalName)

// 修改屬性

rw.WriteAttributes(nodeName);

else

// deep copy

rw.Writer.WriteAttributes(rw.Reader, false);



if (rw.Reader.IsEmptyElement)

rw.Writer.WriteEndElement();

break;

}

}



// Close the root tag

rw.Writer.WriteEndElement();



// Close the document and any internal resources

rw.WriteEndDocument();

}



XmlTextReadWriter類不僅可以讀XML文檔,也可以寫(xiě)XML文檔。你可以它來(lái)讀XML文檔的內(nèi)容,如果需要,你還可以用它來(lái)做一些基本的更新操作;镜母虏僮髟谶@里是指修改某個(gè)已存在的屬性的值或者某個(gè)節(jié)點(diǎn)的內(nèi)容,又或者是增加一個(gè)新的屬性或節(jié)點(diǎn)。對(duì)于更復(fù)雜的操作,最好還是用XMLDOM分析器。

總結(jié)

Reader和Writer是.NET Framework中處理XML數(shù)據(jù)的根本。它們提供了對(duì)所有XML數(shù)據(jù)訪問(wèn)功能的原始的API。Reader像一個(gè)新的分析器類,它即有XMLDOM的強(qiáng)大,又有SAX的快速簡(jiǎn)單。Writer為簡(jiǎn)單的創(chuàng)建XML文檔而設(shè)計(jì)。雖然Reader和Writer都是.NET Framework中的一小塊,但是它們是相互獨(dú)立的API。在本文中,我們只討論了怎么樣用Reader和Writer完成一些主要的工作, 介紹了驗(yàn)證分析器的原理機(jī)制,并把Reader和writer整合在一個(gè)單獨(dú)的類中。上述所有的這些類都是輕量級(jí)的,類似于游標(biāo)式的XMLDOM分析器。