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

简介:

一、使用XmlReader类的步骤如下

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

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

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

(一)开始读取文档

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

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()来访问
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的文件

<? 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页代码


<% @ 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.读取元素 代码


        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.读取元素和属性名称代码


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. 读取内容


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>";
                               
this.mEmployeesLabel.Text += "<li>ID-" + employeeID + "</li>";
                           }

                           
if (reader.Name == "firstName")
                           
{
                               
this.mEmployeesLabel.Text += "<li>First Name-" + reader.ReadString() + "</li>";
                           }

                           
if (reader.Name == "lastName")
                           
{
                               
this.mEmployeesLabel.Text += "<li>Last Name-" + reader.ReadString() + "</li>";
                           }

                           
if (reader.Name == "city")
                           
{
                               
this.mEmployeesLabel.Text += "<li>City-" + reader.ReadString() + "</li>";
                           }

                           
if (reader.Name == "state")
                           
{
                               
this.mEmployeesLabel.Text += "<li>state-" + reader.ReadString() + "</li>";
                           }

                           
if (reader.Name == "zipCode")
                           
{
                               
this.mEmployeesLabel.Text += "<li>state-" + reader.ReadElementContentAsInt() + "</li>";
                           }

                       }

                       
else if (reader.NodeType == XmlNodeType.EndElement)
                       
{
                           
if (reader.Name == "employee")
                           
{
                               
this.mEmployeesLabel.Text += "</ul>";
                               
this.mEmployeesLabel.Text += "</li>";
                           }

                       }

                   }

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

           }

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

       }

 效果:

Employees
  • Employee-1
    • ID-1
    • First Name-Jack
    • Last Name-Wang
    • City-BeiJing
    • state-BeiJing
    • state-100061
  • Employee-2
    • ID-2
    • First Name-DeHua
    • Last Name-Liu
    • City-Hongkong
    • state-China
    • state-61

 

本文转自敏捷的水博客园博客,原文链接 http://www.cnblogs.com/cnblogsfans/archive/2008/03/15/1107321.html如需转载请自行联系原作者

王德水
相关文章
|
7月前
|
XML 存储 C#
C#三十 Ado.net和XML
C#三十 Ado.net和XML
36 0
|
7月前
|
XML 存储 JSON
使用自定义XML配置文件在.NET桌面程序中保存设置
本文将详细介绍如何在.NET桌面程序中使用自定义的XML配置文件来保存和读取设置。除了XML之外,我们还将探讨其他常见的配置文件格式,如JSON、INI和YAML,以及它们的优缺点和相关的NuGet类库。最后,我们将重点介绍我们为何选择XML作为配置文件格式,并展示一个实用的示例。
96 0
|
XML 数据格式
hutool将XML文档转换为String
hutool将XML文档转换为String
|
15天前
|
XML JavaScript 前端开发
XML文档节点导航与选择指南
XPath是XSLT的核心部分,用于XML文档的节点定位和选择。它采用路径表达式语法,包含200多个内置函数处理各种数据类型。XPath在编程语言如JavaScript中广泛使用,与XSLT配合进行XML转换和样式处理。它涉及7种节点类型,如元素、属性和文本,以及多种节点间关系,如父、子、同级等。XPath还使用轴(如ancestor、child)来描述节点间的关联,并支持运算符进行逻辑和数学操作。
26 0
XML文档节点导航与选择指南
|
1月前
|
XML 开发框架 .NET
C# .NET面试系列八:ADO.NET、XML、HTTP、AJAX、WebService
## 第二部分:ADO.NET、XML、HTTP、AJAX、WebService #### 1. .NET 和 C# 有什么区别? .NET(通用语言运行时): ```c# 定义:.NET 是一个软件开发框架,提供了一个通用的运行时环境,用于在不同的编程语言中执行代码。 作用:它为多语言支持提供了一个统一的平台,允许不同的语言共享类库和其他资源。.NET 包括 Common Language Runtime (CLR)、基础类库(BCL)和其他工具。 ``` C#(C Sharp): ```c# 定义: C# 是一种由微软设计的面向对象的编程语言,专门为.NET 平台开发而创建。 作
174 2
|
2月前
|
开发框架 前端开发 .NET
福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!
为了便于大家查找,特将之前开发的.Net Core相关的五大案例整理成文,共计440页,32w字,免费提供给大家,文章底部有PDF下载链接。
33 1
福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!
|
6月前
|
XML JavaScript 前端开发
SAP UI5 本地开发如何实现 XML 和 JavaScript 代码的自动完成和嵌入式 API 文档自动显示试读版
SAP UI5 本地开发如何实现 XML 和 JavaScript 代码的自动完成和嵌入式 API 文档自动显示试读版
65 0
|
3月前
|
XML 前端开发 定位技术
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
25 0
|
5月前
|
XML 数据采集 JavaScript
基于.Net开源Html解析器,此外还支持SVG、XML等格式
基于.Net开源Html解析器,此外还支持SVG、XML等格式
24 0
|
6月前
|
XML JavaScript 数据格式
使用Dom4J解析XML文档
XML解析的方式 XML常见的两种解析方式: DOM: 要求解析器将整个XML文件全部加载到内存中,生成一个Document对象 优点:元素和元素之间保留结构、关系,可以针对元素进行增删查改操作 缺点:如果XML文件过大,可能会导致内存溢出 SAX:是一种速度更快,更加高效的解析方式。它是逐行扫描,边扫描边解析,并且以事件驱动的方式来进行具体的解析,每解析一行都会触发一个事件 优点: 不会出现内存溢出的问题,可以处理大文件 缺点:只能读,不能写 概念辨析: 解析器就是根据不同的解析方式提供具体的实现。 为了方便开发人员来解析XML,有一些方便操作的类库。例如Dom4j其中就包含了很多解
58 0

相关课程

更多