XML参考 :XmlReader 详解、实例-- 详解

转:http://www.cnblogs.com/Dlonghow/archive/2008/07/28/1252191.html

XML参考 :XmlReader 详解、实例(1)-- 详解

 

.NET Framework 类库

XmlReader 类

 

表示提供对 XML 数据进行快速、非缓存、只进访问的读取器,即 对 XML 数据流的只进只读访问。XmlReader 类符合 W3C 可扩展标记语言 (XML) 1.0 和“XML 中的命名空间”建议。

XmlReader 在发生 XML 分析错误时引发 XmlException。引发异常后,读取器的状态不可预知。例如,报告的节点类型可能不同于当前节点的实际节点类型。使用 ReadState 属性可以检查读取器是否处于错误状态。

一、使用XmlReader类的步骤如下

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

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

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

(一)开始读取文档

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

XmlReader reader = XmlReader.Create("Employees.xml");
reader.ReadStartElement();

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

【重要事项】:

虽然 Microsoft .NET Framework 包含 XmlReader 类的具体实现,如 XmlTextReaderXmlNodeReaderXmlValidatingReader 类,但是在 2.0 版本中,建议的做法是使用 Create 方法创建 XmlReader 实例。

(二)读取元素

(1)Read(), ReadString(),ReadStartElement(),ReadEndElement()都能读取Element节点。

(2)每个方法都调到文档的下一个节点。

(3)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,则它将返回空的字符串并将读取器定位在下一个节点上。

转:http://www.cnblogs.com/Dlonghow/archive/2008/07/28/1254261.html

XML参考 :XmlReader 详解、实例(2)-- 读取XML节点

 

.NET Framework 类库

XmlReader 类

 

表示提供对 XML 数据进行快速、非缓存、只进访问的读取器,即 对 XML 数据流的只进只读访问。XmlReader 类符合 W3C 可扩展标记语言 (XML) 1.0 和“XML 中的命名空间”建议。

二.实例,读取XML节点

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.读取元素的代码:


using System;
using System.Collections.Generic;
using System.Text;
using System.Xml; namespace JackDong.XmlReaderDemo
{
    class XmlReaderDemo
    {
       private static string xmlFilePath = @"..\..\EmployeeInfo.xml";// @"D:\\EmployeeInfo.xml"         public static string ReadXml()
        {
            string result = "";             try
            {
                using (XmlReader reader = XmlReader.Create(xmlFilePath))
                {
                    while (reader.Read())
                    {
                        if (reader.NodeType == XmlNodeType.Element)
                        {
                            for (int count = 0; count < reader.Depth; count++)
                            {
                                result += "---";
                            }
                            result += "->" + reader.Name + "\n";
                        }
                    }
                }
            }
            catch (Exception ex){
                result += "An Exception occured: " + ex.Message; 
            }
            return result;
        }
    }     class Program
    {
        static void Main()
        {
            string strReturn = XmlReaderDemo.ReadXml();
            Console.WriteLine(strReturn);
            Console.ReadLine();
        }
    }
}

3.执行效果如下:

转:http://www.cnblogs.com/Dlonghow/archive/2008/07/28/1254290.html

XML参考 :XmlReader 详解、实例(3)-- 读取XML节点和属性名称

 

.NET Framework 类库

XmlReader 类

 

表示提供对 XML 数据进行快速、非缓存、只进访问的读取器,即 对 XML 数据流的只进只读访问。XmlReader 类符合 W3C 可扩展标记语言 (XML) 1.0 和“XML 中的命名空间”建议。

三.读取XML节点和属性名称


class XmlReaderDemo
    {
        private static string xmlFilePath = @"..\..\EmployeeInfo.xml";// @"D:\\EmployeeInfo.xml"         public static string ReadXml()
        {
            string result = "";
            try
            {
                using (XmlReader reader = XmlReader.Create(xmlFilePath))
                {
                    while (reader.Read())
                    {
                        if (reader.NodeType == XmlNodeType.Element)
                        {
                            for (int count = 0; count < reader.Depth; count++)
                            {
                                result += "";
                            }
                            result += "->" + reader.Name;
                            if (reader.HasAttributes)
                            {
                                result += "(";
                                for (int count = 0; count < reader.AttributeCount; count++)
                                {
                                    reader.MoveToAttribute(count);
                                    result += reader.Name + ",";
                                }
                                result += ")";
                            }
                            result += "\n";
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                result += "An Exception occured: " + ex.Message;
            }
            return result;
        }
    }     class Program
    {
        static void Main()
        {
            string strReturn = XmlReaderDemo.ReadXml();
            Console.WriteLine(strReturn);
            Console.ReadLine();
        }
    }

效果图如下所示:

 
 
 

XML参考 :XmlReader 详解、实例(4)-- 读取XML内容

 

.NET Framework 类库

XmlReader 类

 

表示提供对 XML 数据进行快速、非缓存、只进访问的读取器,即 对 XML 数据流的只进只读访问。XmlReader 类符合 W3C 可扩展标记语言 (XML) 1.0 和“XML 中的命名空间”建议。

1.实例:读取XML内容

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;    color:White;">
    <asp:Label ID="mEmployeesLabel" runat="server" Text=""></asp:Label>
    </div>
    </form>
</body>
</html>

2.读取XML内容的代码


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;
            }
        }

3.效果如下:

XML参考 :XmlReader 详解、实例的更多相关文章

  1. 史上最全的maven pom.xml文件教程详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  2. Message,MessageQueue,Looper,Handler详解+实例

    Message,MessageQueue,Looper,Handler详解+实例 原文地址 Android的Handler使用(这篇简单介绍Handler的使用) 一.几个关键概念 1.Message ...

  3. gvoory脚本中关于HttpClient使用详解实例

    一.gvoory脚本中关于HttpClient使用详解实例 HttpClient:是一个接口 首先需要先创建一个DefaultHttpClient的实例 HttpClient httpClient=n ...

  4. Rxjava2 介绍与详解实例

    目录 前言 RX介绍 Rx模式 Rx使用依赖: Rxjava的入门基础 1. Observable 2. Flowable 3. Single 4. Completable 5. Maybe 6. S ...

  5. crossdomain.xml的配置详解

    目录 1 简介 2 crossdomain.xml的配置详解 3 总结 1 简介 flash在跨域时唯一的限制策略就是crossdomain.xml文件,该文件限制了flash是否可以跨域读写数据以及 ...

  6. logback logback.xml常用配置详解(三)

    logback logback.xml常用配置详解 <filter> <filter>: 过滤器,执行一个过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之 ...

  7. iOS开发——UI篇OC篇&UICollectionView详解+实例

    UICollectionView详解+实例 实现步骤: 一.新建两个类 1.继承自UIScrollView的子类,比如HMWaterflowView * 瀑布流显示控件,用来显示所有的瀑布流数据 2. ...

  8. Android:weight,margin,padding详解实例

    weight详解 weight是用来等比例划分区域的属性. 案例代码 <LinearLayout xmlns:android="http://schemas.android.com/a ...

  9. logback logback.xml常用配置详解(一)<configuration> and <logger>

    logback logback.xml常用配置详解(一)<configuration> and <logger> 博客分类: Log java loglogback  原创文章 ...

随机推荐

  1. jq与js 区别

    $(this).html(666); <div id="a">123</div> <script> $("#a").clic ...

  2. QQ的账号登录及api操作

    .qq.php <?php /** * PHP Library for qq.com * * @author */ class qqPHP { function __construct($app ...

  3. Linux SSH远程文件/目录传输命令scp

    转载地址:http://www.vpser.net/manage/scp.html 相信各位VPSer在使用VPS时会经常在不同VPS间互相备份数据或者转移数据,大部分情况下VPS上都已经安装了Ngi ...

  4. Axure 全局辅助线(转)

    普通辅助线作用于当前页 全局作用于所有页面 , 包括新建页面 创建普通辅助线直接拉出来 创建全局辅助线 , 在拉出来的时候按住 Ctrl 默认情况下 , 颜色不同 辅助线可以多选 , 用拖选 或 按 ...

  5. sql语句中----删除表数据的"三兄弟"

    说到删除表数据的关键字,大家记得最多的可能就是delete了 然而我们做数据库开发,读取数据库数据.对另外的两兄弟用得就比较少了 现在来介绍另外两个兄弟,都是删除表数据的,其实也是很容易理解的 老大- ...

  6. 剑指offer系列——二维数组中,每行从左到右递增,每列从上到下递增,设计算法找其中的一个数

    题目:二维数组中,每行从左到右递增,每列从上到下递增,设计一个算法,找其中的一个数 分析: 二维数组这里把它看作一个矩形结构,如图所示: 1 2 8 2 4 9 12 4 7 10 13 6 8 11 ...

  7. loj 1038(dp求期望)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25915 题意:求一个数不断地除以他的因子,直到变成1的时候 除的次 ...

  8. SpringMVC解析3-DispatcherServlet组件初始化

    在spring中,ContextLoaderListener只是辅助功能,用于创建WebApplicationContext类型实例,而真正的逻辑实现其实是在DispatcherServlet中进行的 ...

  9. 从新注册 .DLL CMD 运行regsvr32 *.dll注册该DLL 或 regsvr32 /s *.DLL 求证

    从新注册 .DLL  CMD 运行regsvr32  *.dll注册该DLL  或 regsvr32 /s  *.DLL 求证

  10. 字体和壁纸合并后再更改壁纸--《用delphi开发共享软件》-15.2桌面提示器

    procedure TFrmPlay.mnDeskPicClick(Sender: TObject); Var s:String; i:Integer; begin //s:=Path+'SetPic ...