`
wangdeshui
  • 浏览: 257263 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ASP.NET 2.0 XML 系列(5):用XmlReader读取XML文档

阅读更多

一、使用XmlReader类的步骤如下

(1) 使用XmlReader类的Create()创建该类的一个实例,并将被读取的XML文件名称作为参数传入方法

(2) 建立一个反复调用的Read()方法的循环。这个方法从文件的第一个节点开始,然后读取所有余下的节点,但每次调用只读取一个节点,如果存在一个节点可被读取  则返回True,当到达文件最后时返回False.

(3) 在这个循环中将检查XmlReader对象的属性和方法,以获得当前节点的信息(类型、名称、数据等等),不断地执行该循环知道Read()返回False.

(一)开始读取文档

要开始读取xml文档,你可以调用任意一个Read()方法,如:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->XmlReader reader = XmlReader.Create("Employees.xml");
reader.ReadStartElement();

 

或者reader.MoveToContent()直接跳至文档内容,如果当前节点不是内容节点(内容节点是CDATA, Element,Entity,EntityReference).如果位于属性上,将会返回至包含该属性的元素。

(二)读取元素

Read(), ReadString(),ReadStartElement(),ReadEndElement()都能读取Element节点。每个方法都调到文档的下一个节点。MovetoElement()只移动到下一个节点而不读取它。

当XmlReader读取文档时,他的状态有可能如下:

成员名称 说明
Closed 已调用 Close 方法。
EndOfFile 已成功到达文件结尾。
Error 出现错误,阻止读取操作继续进行。
Initial 未调用 Read 方法。
Interactive 已调用 Read 方法。可能对读取器调用了其他方法。
 
(三)读取属性
应当先用HasAttributes检查是否有属性,然后可以通过MoveToAttribute(), MoveToFirstAttribute(),MoveToNextAttribute()来访问
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->XmlReader reader = XmlReader.Create("Employees.xml");
         
if (reader.HasAttributes)
         
{
             reader.MoveToAttribute(
"id");
         }

(四)读取内容和其他数据

ReadString()读取当前节点内容为字符串,还可以使用ReadElementContentAsXXX(),ReadContentAsXXX可以在当前位置读取文本内容。

该方法返回元素的内容、文本、空白、重要空白或 CDATA 节点。

如果定位在元素上,ReadString 将所有文本、重要的空白、空白和 CDATA 节节点串联在一起,然后将串联在一起的数据作为元素内容返回。当遇到任何标记(包括注释和处理指令)时,它就会停止。这可以在混合内容模型中发生,也可以在读取元素结束标记时发生。

如果定位在元素文本节点上,则 ReadString 执行相同的串联,即从该文本节点到元素结束标记。如果读取器定位在属性文本节点上,则 ReadString 与读取器定位在元素开始标记上时的功能相同。它返回所有串联在一起的元素文本节点。

如果定位在属性上,则 ReadString 将返回空字符串,并将读取器移回到拥有该属性的元素。

如果在任何其他节点类型上调用 ReadString,则它将返回空的字符串并将读取器定位在下一个节点上。

二、实例:

1. 我们先创建一个Employees.xml的文件

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><?xml version="1.0" encoding="utf-8" ?>
<employees>
  
<employee id="1">
    
<name>
      
<firstName>Jack</firstName>
      
<lastName>Wang</lastName>
    
</name>
    
<city>BeiJing</city>
    
<state>BeiJing</state>
    
<zipCode>100061</zipCode>
  
</employee>
  
<employee id="2">
    
<name>
      
<firstName>DeHua</firstName>
      
<lastName>Liu</lastName>
    
</name>
    
<city>Hongkong</city>
    
<state>China</state>
    
<zipCode>000061</zipCode>
  
</employee>
</employees>

 

 

2.page页代码


<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    
<title>Untitled Page</title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div style="width:400px; border:solid 1px #000; background-color:#8ABBDF;  color:White;">
    
<asp:Label ID="mEmployeesLabel" runat="server" Text=""></asp:Label>
    
</div>
    
</form>
</body>
</html>

3.读取元素 代码


<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->        string xmlFilePath=Request.PhysicalApplicationPath+@"\Employees.xml";
            
try
            
{
                
using (XmlReader reader=XmlReader.Create(xmlFilePath))
                
{
                    
string result;
                    
while (reader.Read())
                    
{
                        
if (reader.NodeType == XmlNodeType.Element)
                        
{
                            result 
= "";
                            
for (int count = 0; count < reader.Depth; count++)
                            
{
                                result 
+= "---";
                            }

                            result 
+= "->" + reader.Name + "<br/>";
                            
this.mEmployeesLabel.Text += result;
                        }

                    }

                }

            }

            
catch (Exception ex)
            
{
                
this.mEmployeesLabel.Text = "An Exception occured:" + ex.Message;
            }

4.效果

xmlreadersample

5.读取元素和属性名称代码

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->protected void Page_Load(object sender, EventArgs e)
       
{          
           
string xmlFilePath=Request.PhysicalApplicationPath+@"\Employees.xml";
           
try
           
{
               
using (XmlReader reader=XmlReader.Create(xmlFilePath))
               
{
                   
string result;
                   
while (reader.Read())
                   
{
                       
if (reader.NodeType == XmlNodeType.Element)
                       
{
                           result 
= "";
                           
for (int count = 0; count < reader.Depth; count++)
                           
{
                               result 
+= "---";
                           }

                           result 
+= "->" + reader.Name ; 
                           
this.mEmployeesLabel.Text += result;
                           
//开始读属性
                           if (reader.HasAttributes)
                           
{
                               
this.mEmployeesLabel.Text += "(";
                               
for (int count = 0; count < reader.AttributeCount; count++)
                               
{
                                   reader.MoveToAttribute(count);
                                   
this.mEmployeesLabel.Text += reader.Name+",";
                               }

                               
this.mEmployeesLabel.Text += ")";                            
                           }

                           
this.mEmployeesLabel.Text += "<br/>";
                       }

                   }

               }

           }

           
catch (Exception ex)
           
{
               
this.mEmployeesLabel.Text = "An Exception occured:" + ex.Message;
           }

       }


  运行结果:

->employees
---->employee(id,)
------->name
---------->firstName
---------->lastName
------->city
------->state
------->zipCode
---->employee(id,)
------->name
---------->firstName
---------->lastName
------->city
------->state
------->zipCode

6. 读取内容


<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->protected void Page_Load(object sender, EventArgs e)
       
{
           
string employeeID = "";
           
string xmlFilePath = Request.PhysicalApplicationPath + @"\Employees.xml";
           
try
           
{
               
using (XmlReader reader = XmlReader.Create(xmlFilePath))
               
{
                   
this.mEmployeesLabel.Text = "<b>Employees</b>";
                   
this.mEmployeesLabel.Text += "<ul>";                   

                   
while (reader.Read())
                   
{
                       
if (reader.NodeType == XmlNodeType.Element)
                       
{
                           
if (reader.Name == "employee")
                           
{
                               employeeID 
= reader.GetAttribute("id");
                           }

                           
if (reader.Name == "name")
                           
{
                               
this.mEmployeesLabel.Text += "<li>" + "Employee-" + employeeID;
                               
this.mEmployeesLabel.Text += "<ul>";
http://i
分享到:
评论

相关推荐

    1.ASP.NET.2.0.XML.高级编程(第3版) [1/3]

    \r\n 3.1.11 XML和ADO.NET\r\n 3.1.12 ASP.NET配置 \r\n 3.2 小结 \r\n第4章 用XmlReader和XmlWriter读写XML数据\r\n 4.1 XML的读取器和书写器\r\n 4.2 使用XmlReader类读取XML\r\n 4.2.1 XmlReader简介 ...

    ASP.NET2.0认证题

    ### ASP.NET 2.0 认证题解析 #### 题目一:XML文档验证错误查找 **问题描述:** 假设你正在开发一个Web应用程序,该应用的主要功能是处理XML文档,它需要从多个来源接收这些文档,然后将它们读取并存储到Microsoft...

    ASP.NET读取XML文件

    本篇教程的目标是让开发者熟练地使用三种主要的ASP.NET类来读取XML文件:XmlReader、XMLDocument和XMLWriter。首先,我们来看XmlReader,这是一个高效且节省内存的读取器,它不存储整个XML文档,而是按需读取节点,...

    Asp.net读取返回XML页面的信息

    在Asp.net中,读取并处理XML页面信息...通过以上知识点,开发者可以在Asp.net中轻松地从URL读取XML页面,并处理其中的数据,实现与远程服务的数据交换。理解并熟练运用这些技术对于构建功能丰富的Web应用程序至关重要。

    ASP.NET操作XML

    在ASP.NET中,XML操作是常见的任务,它允许开发者处理XML文档,进行数据的读取、写入、解析和序列化。下面将详细探讨ASP.NET操作XML的相关知识点。 1. **XML文档对象模型 (XML DOM)**: ASP.NET 提供了System.Xml...

    ASP.NET-[其他类别]Asp.net操作XML源码.zip

    在ASP.NET中,可以使用XmlDocument类来创建、加载、修改和保存XML文档。 4. **XmlNode和XmlNodeList**:XmlNode是DOM模型的基本元素,代表XML文档中的任何节点,如元素、属性、文本等。XmlNodeList则是一个节点集合...

    C#(asp.net) XML操作(添删改查)

    本文档将详细介绍如何使用C#结合ASP.NET技术对XML文档进行基本的操作,包括读取、查询、添加、删除以及编辑等核心功能。同时,文章还提供了一些实践中的注意事项,帮助开发者更好地理解和掌握XML文件的处理技巧。 #...

    asp.net操作xml

    本篇文章将深入探讨如何使用ASP.NET进行XML的操作,包括添加、更改和删除XML文档中的元素。 首先,我们需要了解XML文档的基本结构。XML文档由一系列元素组成,每个元素可以有子元素,同时可以包含属性来提供额外的...

    [其他类别]Asp.net 操作XML 源码_xmloperation(ASP.NET源码).rar

    3. **System.Xml.XmlReader** 和 **System.Xml.XmlWriter**: 这两个类分别用于高效地读取和写入XML数据,不保留整个文档对象,因此适用于处理大型XML文件。 在描述中提到的源码示例可能涵盖以下内容: 1. **XML文件...

    ASP.NET_XML深入编程技术

    ASP.NET XML 深入编程技术是Web开发领域中的一个重要主题,主要涵盖了如何在ASP.NET环境中高效地使用XML进行数据存储、传输和处理。XML(eXtensible Markup Language)是一种自描述、结构化的数据格式,广泛应用于...

    ASP. 2.0 XML高级编程 (第3版)

    1. **使用XmlReaderSettings和XmlReader类验证XML文件** - `XmlReader` 类用于快速读取XML文档。通过配置 `XmlReaderSettings` 对象,您可以设置验证模式、加载外部实体等选项。这使得能够高效地进行XML文档的验证。...

    【ASP.NET编程知识】.net读写xml文档详解.docx

    在ASP.NET编程中,处理XML文档是一项常见的任务。本文将详细讲解.NET框架中涉及XML文档读写的核心类和方法,以及如何利用它们来实现XML文档的创建和操作。 首先,我们关注.NET框架中的几个关键命名空间: 1. **...

    面向.net的xml程序设计(实验报告+源码)

    然后,使用XmlReaderSettings和XmlReader类,设置DTD验证,并读取XML文档以进行验证。 对于XSD验证,我们先创建一个.xsd文件,定义XML文档的架构。然后,使用DataSet或XmlSchemaSet,加载XSD并进行验证。在.NET中,...

    ASP.NET——XML文件操作篇

    本文详细介绍了 ASP.NET 中 XML 文件的写入和读取方法,包括 DOM、XMLReader 和 XPath 等多种读取方式,并简要介绍了 XSL 显示 XML 和 XML 文件的验证。希望这些知识能帮助开发人员更好地掌握 XML 文件的处理技巧。

    .net操作XML大全(经典收藏)

    - **XML的读取与解析**:可以使用XmlDocument类加载XML文档,然后通过SelectNodes或SelectSingleNode方法查询元素,或者使用XmlNode的子节点来遍历XML结构。 - **XML的创建与写入**:使用XmlWriter类可以创建新的...

    asp.net 数据库连接到xml

    如果需要将XML数据持久化,可以使用`XmlTextWriter`将XML写入文件,或者使用.NET Framework提供的XML序列化技术将对象转换为XML并保存。 5. **性能优化**:为了提高性能,可以使用数据适配器(如`SqlDataAdapter`)...

    asp.net 显示XML数据和架构

    例如,可以使用`XDocument.Load()`方法读取XML文件: ```csharp XDocument doc = XDocument.Load("path_to_xml_file.xml"); ``` 2. **遍历XML数据**:`XDocument`对象提供了丰富的API来访问和操作XML数据。例如,...

    asp.net 高效的数据源文件XML的应用

    XmlReader是一个只读、向前只进的扫描器,它按需读取XML数据,节省了内存。而XmlWriter则用于生成XML流,允许开发者逐步构建XML文档。这种方式适用于处理大文件或在网络上传输XML数据时,因为它更高效且内存占用较低...

    基于C#+ASP.NET实现的Ajax XML Project工程代码例子

    例如,你可以使用XmlWriter写入XML数据,然后通过XmlReader读取并处理这些数据。当客户端发起Ajax请求时,服务器端的C#代码处理请求,根据需要操作XML,然后将处理后的结果以XML格式返回。 此外,该项目可能还涉及...

    ASP.NET XML深入编程.

    SAX是事件驱动的解析方式,只在需要时读取XML文档的一部分。在ASP.NET中,可以使用`System.Xml.XmlReader`实现SAX解析。`XmlReader`不创建完整的文档对象模型,而是按需读取节点,从而节省内存。这种方式适合处理大...

Global site tag (gtag.js) - Google Analytics