XMLReader类

XML文件的快速读取器:XmlReader类

XmlReader类相当于XML数据读取器,该类提供对XML数据进行快速、非缓存、只进读取的功能。使用该类可以从当前定位的节点,用多种读取方法向前唯一地读取下一个节点。

XmlReader类在.net framework中具有多种实现,例如XmlTextReader类、XmlNodeReader类和XmlValidatingReader类等。一般的做法不是使用这些类的构造函数来创建XmlReader类的实例,而是通过Create方法创建。

在使用Create方法创建xmlReader类实例的时候,可以指定XmlReaderSettings类实例的相关属性,启用或者禁用其某些功能,然后将XmlReaderSettings实例作为参数传递给Create方法。

之所以使用该方法创建XmlReader,是因为可以通过XmlReaderSettings类实例属性的指定,来决定创建的XmlReader类实例所支持的功能,还可以使用通过一个XmlReaderSettings类实例创建多个具有相同功能的XmlReader类实例。这在批量处理XML文档时具有相当重要的意义。

另外,使用Create 方法可以从原有的XmlReader 类实例的读取特性。如果不创建新的XmlReader类实例,同时通过XmlReaderSettings来指定新XmlReader类实例的读取特性。如果不创建新的XmlReader实例,而是赋值给原有的XmlReader类实例,将修改原有的XmlReader类实例的读取特性。

最后,使用Create方法创建的XmlReader类实例可以更好地使用.net framework中的某些功能,例如更好的一致性检查、与XML1.0标准的一致性等。这是其他方法创建的XmlReader类实例所不具备的。

XmlReader类在读取XML数据错误时将引发XmlException异常。此时的XmlReader类实例不能正常使用,例如,返回的节点属性与实际的当前节点属性会不一致。通过查看ReadState可以检查当前XmlReader类实例是否正常。

XmlReader类的语法定义如下:

public abstract class XmlRaader : IDisposeable

XmlReader 是抽象类,没有构造函数,可以使用XmlReader类的Create静态方法创建其实例。下面将演示如何使用Create方法创建XmlReader类实例,代码如下:

 

 

 

 

应用:XML文件的快速读取

XmlReader类提供的XML文档只读进非缓存的读取方式,能够快速地读取XML结构中包含的数据。在读取较大的XML文档时,使用XmlReader类提供的读取功能,也可以获得较好的性能。

本例的目的是演示如何通过XmlReader提供的方法,获取XML数据中指定的数据,并把这些数据显示出来。实例的详细步骤如下所述。

 1、建立一个名为“Book.xml”文件。

<?xml version="1.0"?>
<store>
  <book id = "1" genre="novel" publicationdate="1997" ISBN="1-861001-57-5">
    <title>Pride And Prejudice</title>
    <price>24.95</price>
  </book>
  <book id = "2" genre="business" publicationdate="2003" ISBN="4-746623-03-2">
    <title>Custumor Manger</title>
    <price>31.46</price>
  </book>
</store>

2、新建一个Windows控制台应用程序,命名为“ReadBook”。

using System.Collections.Generic;
using System.Text;
using System.Xml;
namespace ReadBook
{
    class Program
    {
        static void Main(string[] args)
        {
            XmlReader read = XmlReader.Create(@"C:\book.xml");
            while (read.Read())
            {
                read.ReadToFollowing("book");
                if (!(read.ReadState == ReadState.EndOfFile))
                {
                    String sgenre = read.GetAttribute("genre");
                    String spublicationdate = read.GetAttribute("publicationdate");
                    read.ReadToFollowing("title");
                    if (!(read.ReadState == ReadState.EndOfFile))
                    {
                        String sname = read.ReadElementString("title");
                        Console.WriteLine("书名:" + sname + " 类别:" + sgenre + " 出版日期:" + spublicationdate);
                    }
                }
            }
            read.Close();
            Console.ReadLine();
        }

    }
}


3、输出结果:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值