每個(gè)節(jié)點(diǎn)的類型是XmlNodeType枚舉中的一種,在如圖三所示的代碼中,我們只用了其中的兩種類型:Element 和 EndElement。輸出源碼重新定制了原始的文檔結(jié)構(gòu),它丟棄或者說(shuō)是忽略了XML元素的屬性和節(jié)點(diǎn)內(nèi)容,只輸出了元素節(jié)點(diǎn)名。假設(shè)我們運(yùn)用了下面的XML片斷:
<mags> <mag name="MSDN Magazine"> MSDN Magazine </mag> <mag name="MSDN Voices"> MSDN Voices </mag> </mags> 用上面的程序輸出的結(jié)果如下:
<mags> <mag> </mag> <mag> </mag> </mags>
子節(jié)點(diǎn)的縮進(jìn)量是根據(jù)閱讀器的深度屬性(Depth屬性)設(shè)置的,Depth屬性返回一個(gè)整形的數(shù)據(jù),它表示當(dāng)前節(jié)點(diǎn)的嵌套層次。所有文本都放在StringWriter對(duì)象中(一個(gè)非常方便的基于流的封裝了StrigBuilder類的類)。
如前所述,閱讀器不會(huì)自動(dòng)通過(guò)Read方法訪問(wèn)屬性節(jié)點(diǎn)。要訪問(wèn)當(dāng)前元素的屬性節(jié)點(diǎn)集合,必須用一個(gè)簡(jiǎn)單的用MoveToNextAttribute方法的返回值控制的循環(huán)去遍歷該集合。下面的代碼用于訪問(wèn)當(dāng)前節(jié)點(diǎn)的所有屬性,并把屬性的名稱和它的值用逗號(hào)分開(kāi)組合成一個(gè)字符串: if (reader.HasAttributes) while(reader.MoveToNextAttribute()) buf += reader.Name + "=\"" + reader.Value + "\","; reader.MoveToElement();
當(dāng)你完成對(duì)屬性集的處理時(shí),調(diào)用MoveToElement方法使指針?lè)祷氐綄傩运鶎俚脑毓?jié)點(diǎn)。準(zhǔn)確的說(shuō),MoveToElement方法并不是真正的移動(dòng)指針,因?yàn)樵谔幚韺傩约瘯r(shí)指針從來(lái)就沒(méi)有從元素節(jié)點(diǎn)中移開(kāi)。MoveToElement方法只不過(guò)指向某個(gè)內(nèi)部成員,并依次取得成員的值。例如,用Name屬性獲得某個(gè)屬性的屬性名,然后調(diào)用MoveToElement方法把指針移到其所屬的元素節(jié)點(diǎn)處。但是當(dāng)你不需要繼續(xù)處理別的節(jié)點(diǎn)時(shí),就不必再調(diào)用MoveToElement方法了。
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!