国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#中如何使用 XmlReader 讀取XML文件

2019-10-29 21:28:02
字體:
供稿:網(wǎng)友
本文介紹了C#中使用XmlReader,只讀、向前、循環(huán)讀取XML節(jié)點(diǎn)的方法,并為我們列出、XmlReader類的方法、屬性、枚舉等成員,希望對大家學(xué)習(xí)有所幫助。
 

XmlReader通過向前讀取文檔并識別讀取到的元素,為我們提供了一種消耗資源最少的方式來解析XML數(shù)據(jù)。很多時候我們都是利用XmlReader來對XML文件的數(shù)據(jù)有效性進(jìn)行驗(yàn)證(使用XmlReader實(shí)例的Read()方法依次讀取所有節(jié)點(diǎn),以此判斷是否與符合指定的模式)。使用這種非緩存、只讀、只向前的方式,每次讀取只將很少的數(shù)據(jù)放入內(nèi)存,對內(nèi)存的占用量較小,對于讀取內(nèi)容較大的XML文件不失為一種最佳的選擇。

讓我們看看XmlReader類讀取XML文件的步驟:

1、使用XmlReader類的Create()工廠方法創(chuàng)建該類的一個實(shí)例,并將被讀取的XML文件名作為參數(shù)傳入方法;

2、建立一個反復(fù)調(diào)用Read()方法的循環(huán)。這個方法從文件的第一個節(jié)點(diǎn)開始,然后讀取所有余下的節(jié)點(diǎn),但每次調(diào)用只讀取一個節(jié)點(diǎn)。如果存在一個節(jié)點(diǎn)可被讀取則返回True,而當(dāng)?shù)竭_(dá)文件最后時則返回False;

3、在這個循環(huán)中,將檢查XmlReader實(shí)例的屬性和方法,以獲得關(guān)于當(dāng)前節(jié)點(diǎn)的信息(節(jié)點(diǎn)的類型、名稱、數(shù)據(jù)等)。不斷執(zhí)行循環(huán)直到Read()返回False;

下面首先看一個示例:

Employees.xml文件:

<?xml version='1.0'?><employees> <employee id="1">  <name> <firstName>Nancy</firstName> <lastName>Davolio</lastName>  </name> <city>Seattle</city> <state>WA</state> <zipCode>98122</zipCode>  </employee> <employee id="2">  <name> <firstName>Andrew</firstName> <lastName>Fuller</lastName> </name> <city>Tacoma</city> <state>WA</state> <zipCode>98401</zipCode>  </employee> </employees>

aspx代碼:

<%@ Page Language="C#" %><%@ Import Namespace="System.Xml" %><script runat="server"> void Page_Load(object sender, EventArgs e) { //Location of XML file string xmlFilePath = Server.MapPath("~/Employees.xml"); try { using (XmlReader reader = XmlReader.Create(xmlFilePath)) { string result; while (reader.Read()) { //Process only the elements if (reader.NodeType == XmlNodeType.Element) { result = ""; for (int count = 1; count <= reader.Depth; count++) { result += "==="; } result += "=> " + reader.Name + "<br/>"; lblResult.Text += result; } } } } catch (Exception ex) { lblResult.Text = "An Exception occurred: " + ex.Message; }  }</script><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>Reading an XML File using XmlReader</title></head><body> <form id="form1" runat="server"> <div> <asp:label id="lblResult" runat="server" /> </div> </form></body></html>

輸出結(jié)果:

=> employees
====> employee
=======> name
==========> firstName
==========> lastName
=======> city
=======> state
=======> zipCode
====> employee
=======> name
==========> firstName
==========> lastName
=======> city
=======> state
=======> zipCode

下面讓我們看看XmlReader類的屬性和方法:

 

屬 性 說 明
AttributeCount 返回當(dāng)前節(jié)點(diǎn)的屬性個數(shù)
Depth 返回當(dāng)前節(jié)點(diǎn)的深度,用于判斷指定的節(jié)點(diǎn)是否具有子節(jié)點(diǎn)
EOF 判斷讀取器是否位于流的末端
HasAttribute 返回指示當(dāng)前節(jié)點(diǎn)是否具有屬性的布爾值
HasValue 返回指示當(dāng)前節(jié)點(diǎn)是否具有值的布爾值
IsEmptyElement 判斷當(dāng)前節(jié)點(diǎn)是否是一個空元素
LocalName 返回當(dāng)前節(jié)點(diǎn)的本地名稱
Name 返回當(dāng)前節(jié)點(diǎn)的限定名稱
NamespaceURI 返回當(dāng)前節(jié)點(diǎn)的命名空間URI
NodeType 以XmlNodeType枚舉的形式返回當(dāng)前節(jié)點(diǎn)的節(jié)點(diǎn)類型
Prefix 返回與當(dāng)前節(jié)點(diǎn)相關(guān)的命名空間前綴
ReadState 以ReadState枚舉的形式返回讀取器的當(dāng)前狀態(tài)
Settings 返回用于創(chuàng)建XmlReader實(shí)例的XmlReaderSettings對象
Value 返回當(dāng)前節(jié)點(diǎn)的值
ValueType 獲得當(dāng)前節(jié)點(diǎn)的CLR類型

 

XmlReader類的重要方法:

 

方 法 說 明
Close 通過將ReadState枚舉設(shè)置為Closed來關(guān)閉Xmlreader對象
Create 創(chuàng)建XmlReader對象的實(shí)例并將其返回給調(diào)用程序
GetAttribute 獲得屬性的值
IsStartElement 指示當(dāng)前節(jié)點(diǎn)是否是開始標(biāo)簽
MoveToAttribute 移動讀取器到指定的屬性
MoveToContent 如果當(dāng)前節(jié)點(diǎn)不是內(nèi)容節(jié)點(diǎn),則移動讀取器至下一個內(nèi)容節(jié)點(diǎn)
MoveToElement 移動讀取器至包含當(dāng)前屬性的元素;用于列舉屬性以及想切換至包含所有這些屬性的元素
MoveToFirstAttribute 移動讀取器至當(dāng)前節(jié)點(diǎn)的第一個屬性
MoveToNextAttribute 移動讀取器至當(dāng)前節(jié)點(diǎn)的下一個屬性
Read 從流中讀取下一個節(jié)點(diǎn)
ReadContentAs 讀取提供類型的對象的內(nèi)容
ReadElementContentAs 讀取當(dāng)前元素并返回指定類型對象的內(nèi)容
ReadEndElement 移動讀取器越過當(dāng)前結(jié)束標(biāo)簽并移動到下一個節(jié)點(diǎn)
ReadInnerXml 以字符串的形式讀取包括標(biāo)記在內(nèi)的當(dāng)前節(jié)點(diǎn)所有內(nèi)容
ReadOutXml 讀取包括當(dāng)前節(jié)點(diǎn)標(biāo)記和子節(jié)點(diǎn)在內(nèi)的節(jié)點(diǎn)的內(nèi)容
ReadToDescendant 移動讀取器至下一個匹配子孫元素的節(jié)點(diǎn)
ReadToFollowing 不斷讀取直至找到指定的元素
ReadToNextSlibing 移動讀取器至下一個匹配兄弟元素的節(jié)點(diǎn)
ReadValueChunk 允許讀取嵌入在XML文檔中的大型文本流

 

XmlNodeType枚舉的成員:

 

成 員 說 明
Attribute 屬性
CDATA CDATA區(qū)域
Comment XML注釋
Document 文檔對象,表示XML樹的根
DocumentFragment 文檔片斷
DocumentType 文檔類型聲明
Element,EndElement 開始元素和結(jié)束元素
Entity,EndEntity 開始實(shí)體聲明和結(jié)束實(shí)體聲明
EntityReference 實(shí)體引用(如<)
None 有沒有讀取節(jié)點(diǎn)而查詢節(jié)點(diǎn)類型時使用
Notation DTD中的符號條目
ProcessingInstruction XML處理指令
SignificantWhitespace 在混合內(nèi)容模型文檔中的空白,或者設(shè)置了xml:space=preserve時使用
Text 元素的文本內(nèi)容
Whitespace 標(biāo)記之間的空白
XmlDeclaration 在文檔頂部的XML聲明

 

XmlReaderSettings類的重要屬性:

 

屬 性 說 明
CheckCharacters 允許你獲得或者設(shè)置用于指示是否執(zhí)行字符檢查的值
ConformanceLevel 獲得或設(shè)置XmlReader對象的符合要求
IgnoreComment 允許你獲得或設(shè)置用于指示是否忽略注釋的值
IgnoreProcessingInstruction 指定是否忽略處理指令
IgnoreWhitespace 指定是否忽略無意義的空格
ProhibitDtd 指定是否允許DTD處理
Schemas 指定在執(zhí)行XML驗(yàn)證時使用的XmlSchemaSet
ValidationFlags 獲得或者設(shè)置用于指定模式驗(yàn)證設(shè)置的值
ValidationType 獲得或者設(shè)置用于指定所執(zhí)行的驗(yàn)證類型的值
XmlResolver 設(shè)置用于訪問外部文檔的XmlReslover

 

通過XmlReaderSettings類,你可以指定一系列由XmlReader對象支持的功能,為此,只需將XmlReaderSettings作為參數(shù)傳入XmlReader的Create()方法中即可。如下所示:

<script runat="server"> void Page_Load(object sender, EventArgs e) { string xmlFilePath = Server.Mappath("~/Employees.xml");  //Create the XmlReaderSettings object and set appropriate properties XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreComments = true; settings.IgnoreWhitespace = true; try { //Get reference to the XmlReader object using (XmlReader reader = XmlReader.Create(xmlFilePath, settings)) { string result; while (reader.Read()) { //Process only the elements if (reader.NodeType == XmlNodeType.Element) { //Reset the variable for a new element result = ""; for (int count = 1; count <= reader.Depth; count++) { result += "==="; } result += "=> " + reader.Name + "<br/>"; lblResult.Text += result; } } } } catch (Exception ex) { lblResult.Text = "An Exception occurred: " + ex.Message; } }</script>

總結(jié)下來,我們可以使用XmlReader類以非緩存、只讀、只向前的方式讀取XML文件,這種方法占用內(nèi)存少,推薦大家使用。



注:相關(guān)教程知識閱讀請移步到c#教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 承德市| 平罗县| 万山特区| 宁国市| 七台河市| 玛曲县| 永和县| 桐乡市| 安徽省| 翁牛特旗| 磴口县| 密云县| 汕尾市| 佳木斯市| 宁国市| 得荣县| 闵行区| 师宗县| 沙河市| 雅江县| 襄城县| 古浪县| 宜丰县| 赞皇县| 徐州市| 和龙市| 松溪县| 金沙县| 安陆市| 郴州市| 平顶山市| 舞钢市| 泽州县| 东海县| 积石山| 荣成市| 白玉县| 镇坪县| 正镶白旗| 嘉善县| 大城县|