源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-02-17 14:05 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C#中如何使用 XmlReader 读取XML文件
XmlReader通过向前读取文档并识别读取到的元素,为我们提供了一种消耗资源最少的方式来解析XML数据。很多时候我们都是利用XmlReader来对XML文件的数据有效性进行验证(使用XmlReader实例的Read()方法依次读取所有节点,以此判断是否与符合指定的模式)。使用这种非缓存、只读、只向前的方式,每次读取只将很少的数据放入内存,对内存的占用量较小,对于读取内容较大的XML文件不失为一种最佳的选择。 [b]让我们看看XmlReader类读取XML文件的步骤:[/b] 1、使用XmlReader类的Create()工厂方法创建该类的一个实例,并将被读取的XML文件名作为参数传入方法; 2、建立一个反复调用Read()方法的循环。这个方法从文件的第一个节点开始,然后读取所有余下的节点,但每次调用只读取一个节点。如果存在一个节点可被读取则返回True,而当到达文件最后时则返回False; 3、在这个循环中,将检查XmlReader实例的属性和方法,以获得关于当前节点的信息(节点的类型、名称、数据等)。不断执行循环直到Read()返回False; [b]下面首先看一个示例:[/b] [b]Employees.xml文件: [/b]
<?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>

[b]aspx代码:[/b]
<%@ 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>

[b]输出结果:[/b] => employees ====> employee =======> name ==========> firstName ==========> lastName =======> city =======> state =======> zipCode ====> employee =======> name ==========> firstName ==========> lastName =======> city =======> state =======> zipCode [b]下面让我们看看XmlReader类的属性和方法:[/b]
属 性 说 明
AttributeCount 返回当前节点的属性个数
Depth 返回当前节点的深度,用于判断指定的节点是否具有子节点
EOF 判断读取器是否位于流的末端
HasAttribute 返回指示当前节点是否具有属性的布尔值
HasValue 返回指示当前节点是否具有值的布尔值
IsEmptyElement 判断当前节点是否是一个空元素
LocalName 返回当前节点的本地名称
Name 返回当前节点的限定名称
NamespaceURI 返回当前节点的命名空间URI
NodeType 以XmlNodeType枚举的形式返回当前节点的节点类型
Prefix 返回与当前节点相关的命名空间前缀
ReadState 以ReadState枚举的形式返回读取器的当前状态
Settings 返回用于创建XmlReader实例的XmlReaderSettings对象
Value 返回当前节点的值
ValueType 获得当前节点的CLR类型
[b]XmlReader类的重要方法:[/b]
方 法 说 明
Close 通过将ReadState枚举设置为Closed来关闭Xmlreader对象
Create 创建XmlReader对象的实例并将其返回给调用程序
GetAttribute 获得属性的值
IsStartElement 指示当前节点是否是开始标签
MoveToAttribute 移动读取器到指定的属性
MoveToContent 如果当前节点不是内容节点,则移动读取器至下一个内容节点
MoveToElement 移动读取器至包含当前属性的元素;用于列举属性以及想切换至包含所有这些属性的元素
MoveToFirstAttribute 移动读取器至当前节点的第一个属性
MoveToNextAttribute 移动读取器至当前节点的下一个属性
Read 从流中读取下一个节点
ReadContentAs 读取提供类型的对象的内容
ReadElementContentAs 读取当前元素并返回指定类型对象的内容
ReadEndElement 移动读取器越过当前结束标签并移动到下一个节点
ReadInnerXml 以字符串的形式读取包括标记在内的当前节点所有内容
ReadOutXml 读取包括当前节点标记和子节点在内的节点的内容
ReadToDescendant 移动读取器至下一个匹配子孙元素的节点
ReadToFollowing 不断读取直至找到指定的元素
ReadToNextSlibing 移动读取器至下一个匹配兄弟元素的节点
ReadValueChunk 允许读取嵌入在XML文档中的大型文本流
[b]XmlNodeType枚举的成员:[/b]
成 员 说 明
Attribute 属性
CDATA CDATA区域
Comment XML注释
Document 文档对象,表示XML树的根
DocumentFragment 文档片断
DocumentType 文档类型声明
Element,EndElement 开始元素和结束元素
Entity,EndEntity 开始实体声明和结束实体声明
EntityReference 实体引用(如<)
None 有没有读取节点而查询节点类型时使用
Notation DTD中的符号条目
ProcessingInstruction XML处理指令
SignificantWhitespace 在混合内容模型文档中的空白,或者设置了xml:space=preserve时使用
Text 元素的文本内容
Whitespace 标记之间的空白
XmlDeclaration 在文档顶部的XML声明
[b]XmlReaderSettings类的重要属性:[/b]
属 性 说 明
CheckCharacters 允许你获得或者设置用于指示是否执行字符检查的值
ConformanceLevel 获得或设置XmlReader对象的符合要求
IgnoreComment 允许你获得或设置用于指示是否忽略注释的值
IgnoreProcessingInstruction 指定是否忽略处理指令
IgnoreWhitespace 指定是否忽略无意义的空格
ProhibitDtd 指定是否允许DTD处理
Schemas 指定在执行XML验证时使用的XmlSchemaSet
ValidationFlags 获得或者设置用于指定模式验证设置的值
ValidationType 获得或者设置用于指定所执行的验证类型的值
XmlResolver 设置用于访问外部文档的XmlReslover
通过XmlReaderSettings类,你可以指定一系列由XmlReader对象支持的功能,为此,只需将XmlReaderSettings作为参数传入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>

总结下来,我们可以使用XmlReader类以非缓存、只读、只向前的方式读取XML文件,这种方法占用内存少,推荐大家使用。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部