六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

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

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

[摘要]XmlReader類 XML閱讀器支持一個(gè)編程接口,接口用于連接XML文檔,“推出”你要的數(shù)據(jù)。如果你更深入去了解閱讀器,你會(huì)發(fā)現(xiàn)閱讀器工作原理類似于我們的桌面應(yīng)用程序從數(shù)據(jù)庫(kù)中取出數(shù)據(jù)的原理。數(shù)據(jù)庫(kù)服務(wù)返回一個(gè)游標(biāo)對(duì)象,它包含所有查詢結(jié)果集,并返回指向目標(biāo)數(shù)據(jù)集的開始地址的引用。XML閱讀...
XmlReader類

XML閱讀器支持一個(gè)編程接口,接口用于連接XML文檔,“推出”你要的數(shù)據(jù)。如果你更深入去了解閱讀器,你會(huì)發(fā)現(xiàn)閱讀器工作原理類似于我們的桌面應(yīng)用程序從數(shù)據(jù)庫(kù)中取出數(shù)據(jù)的原理。數(shù)據(jù)庫(kù)服務(wù)返回一個(gè)游標(biāo)對(duì)象,它包含所有查詢結(jié)果集,并返回指向目標(biāo)數(shù)據(jù)集的開始地址的引用。XML閱讀器的客戶端收到一個(gè)指向閱讀器實(shí)例的引用。該實(shí)例提取底層的數(shù)據(jù)流并把取出的數(shù)據(jù)呈現(xiàn)為一棵XML樹。閱讀器類提供只讀、向前的游標(biāo),你可以用閱讀器類提供的方法滾動(dòng)游標(biāo)遍歷結(jié)果集中的每一條數(shù)據(jù)。

從閱讀器中看XML文檔不是一個(gè)標(biāo)簽文本文件,而是一個(gè)序列化的節(jié)點(diǎn)集合。它是.NET Framework中的一種特殊的游標(biāo)模式;在.NET Framework中,你找不到其它的任何一個(gè)類似的API函數(shù)。

閱讀器和XMLDOM分析器有幾點(diǎn)不同的地方。XML閱讀器是只進(jìn)的,它沒有父、子、祖宗、兄弟節(jié)點(diǎn)的概念,而且是只讀的。在.NET Framework中,讀寫XML文檔是分為兩種完全不同的功能,分別由XmlReader和XmlWriter類來(lái)完成。要編輯XML文檔,你可以用XMLDOM分析器,或者你自己設(shè)計(jì)一個(gè)類來(lái)實(shí)現(xiàn)這兩種功能。讓我們開始分析閱讀器的程序功能。

XmlReader是一個(gè)抽象類,你可以繼承并擴(kuò)展它的功能。用戶程序一般都基于下面的三種類:XmlTextReader、XmlValidatingReader或者 XmlNodeReader類。所有的這些類都有如圖一的屬性和圖二的方法。要注意的是,某些屬性的值實(shí)際上依賴于實(shí)際的某個(gè)閱讀器類,不同的類與基類可能不同。因此,在圖一中每個(gè)屬性的說明都是以基類為準(zhǔn)的。例如,CanResolveEntity屬性在XmlValidatingReader類中只返回true;而在其它的閱讀器類中它卻可以設(shè)為false。同樣的,在圖二中的某些方法的實(shí)際返回值對(duì)不同的類可能不同。例如,如果節(jié)點(diǎn)類型不是元素節(jié)點(diǎn)(element node),所有包含Atrributes的方法的返回值類型都是void。

XmlTextReader類用只進(jìn),只讀的方式快速訪問XML數(shù)據(jù)流。閱讀器先驗(yàn)證XML文檔是否是格式良好的,如果不是則拋出一個(gè)異常。XmlTextReader 檢查 DTD 的格式是否良好,但不使用 DTD 對(duì)文檔進(jìn)行驗(yàn)證。XmlTextReader通過XML文檔的文件名,或它的URL,或者從文件流中載入XML文檔,然后快速的處理XML文檔數(shù)據(jù)。如果你需要對(duì)文檔的數(shù)據(jù)進(jìn)行驗(yàn)證,你可以用XmlValidatingReader類。

可以用多種方法創(chuàng)建XmlTextReader類的實(shí)例,從硬盤中加載文件,或從URL地址中加載,流(streams)中加載,還有就是從文本中讀入XML文檔數(shù)據(jù):

XmlTextReader reader = new XmlTextReader(file);

注意,所有XmlTextReader類的公共(public)構(gòu)造函數(shù)都要求你指定數(shù)據(jù)源,數(shù)據(jù)源可以是stream、文件或者其它。XmlTextReader默認(rèn)的構(gòu)造函數(shù)是受保護(hù)的(protected),所以不能直接使用。像.NET Framework中所有的閱讀器類一樣(如SqlDataReader類),一旦閱讀器對(duì)象連接并打開,你就可以用Read方法去訪問數(shù)據(jù)了。開始的時(shí)候只能用Read方法把指針移到第一個(gè)元素;然后我們可以用Read方法或其它方法(如Skip, MoveToContent和ReadInnerXml)移動(dòng)指針到下一個(gè)節(jié)點(diǎn)元素。要處理整個(gè)XML文檔的內(nèi)容,可以根據(jù)Read方法的返回值用一個(gè)循環(huán)遍歷文檔內(nèi)容,因?yàn)镽ead方法返回一個(gè)布爾值,當(dāng)讀到文檔的尾節(jié)點(diǎn)時(shí),Read方法返回false,否則它返回true。



Figure 3 Outputting an XML Document Node Layout

string GetXmlFileNodeLayout(string file)
{
// 創(chuàng)建一個(gè)XmlTextReader類使它指向目標(biāo)XML文檔
XmlTextReader reader = new XmlTextReader(file);

// 循環(huán)取出節(jié)點(diǎn)的文本并放入到StringWriter對(duì)象實(shí)例中
StringWriter writer = new StringWriter();
string tabPrefix = "";

while (reader.Read())
{
// 寫開始標(biāo)志,如果節(jié)點(diǎn)類型為元素
if (reader.NodeType == XmlNodeType.Element)
{
//根據(jù)元素所處節(jié)點(diǎn)的深度,加入reader.Depth個(gè)tab符,然后把元素名寫入到<>中。
tabPrefix = new string('\t', reader.Depth);
writer.WriteLine("{0}<{1}>", tabPrefix, reader.Name);
}
else
{
//寫結(jié)束標(biāo)志,如果節(jié)點(diǎn)類型為元素
if (reader.NodeType == XmlNodeType.EndElement)
{
tabPrefix = new string('\t', reader.Depth);
writer.WriteLine("{0}", tabPrefix, reader.Name);
}
}
}

// 輸出到屏幕
string buf = writer.ToString();
writer.Close();

// 關(guān)閉流
reader.Close();

return buf;
}


圖三演示了一個(gè)簡(jiǎn)單的用于輸出一個(gè)給定的XML文檔的節(jié)點(diǎn)元素的函數(shù)。該函數(shù)先打開一個(gè)XML文檔,然后用循環(huán)處理XML文檔中所有的內(nèi)容。每次調(diào)用Read方法,閱讀器的指針都會(huì)向下移一個(gè)節(jié)點(diǎn)。大部分情況下,用Read方法可以處理的元素節(jié)點(diǎn),但有時(shí)候,當(dāng)你從一個(gè)節(jié)點(diǎn)移動(dòng)到下一個(gè)節(jié)點(diǎn)時(shí),可能是在兩個(gè)不同類型的節(jié)點(diǎn)間移動(dòng)。但是Read方法不能在屬性節(jié)點(diǎn)之間移動(dòng)。閱讀器的MoveToContent方法可以讓指針從頭部節(jié)點(diǎn)位置跳到第一個(gè)內(nèi)容節(jié)點(diǎn)位置。在ProcessingInstruction, DocumentType, Comment, Whitespace和SignificantWhitespace類型節(jié)點(diǎn)中也可以用Skip方法移動(dòng)指針。




主站蜘蛛池模板: 亚洲无限乱码一二三四区 | 午夜视频免费在线观看 | 色呦呦在线免费观看 | 亚洲高清一区二区三区四区 | 亚洲最大成人网色 | 一级黄色在线视频 | 亚洲国产最新在线一区二区 | 无码免费一区二区三区免费播放 | 欧美做真爱免费无遮挡 | 日韩一级免费毛片 | 日韩手机看片福利精品 | 亚洲熟区 | 青青草原国产在线观看 | 亚洲一区精品在线 | 青草悠悠视频在线观看 | 日本午夜小视频 | 亚洲成人7777| 污污免费视频 | 日韩在线观看免费完整版视频 | 最新版天堂资源中文官网 | 亚洲欧美日本综合 | 中文字幕在线免费观看视频 | 色综合伊人色综合网站中国 | 日本亚洲欧美 | 伊人网免费视频 | 日本三级精品 | 凸凹在线视频 | 青草福利视频 | 日韩国产欧美精品综合二区 | 日本不卡免费新一二三区 | 亚州一级毛片 | 亚洲最新在线观看 | 日日视频 | 午夜性爽视频男人的天堂在线 | 青草久| 欧美一级二级三级视频 | 日韩高清性爽一级毛片免费 | 特黄一级毛片 | 欧美在线a | 手机三级| 日韩欧美第一页 |