• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > 详解C#借助.NET框架中的XmlTextReader类读取XML的方法

详解C#借助.NET框架中的XmlTextReader类读取XML的方法

作者:hzy3774 字体:[增加 减小] 来源:互联网 时间:2017-05-28

hzy3774 通过本文主要向大家介绍了c语言32关键字详解,c语言链表详解,c语言指针详解,c语言题库及详解答案,c语言关键字详解等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

XmlTextReader 提供对 XML 数据流的只进只读访问。当前节点指读取器定位到的节点。使用任何读方法推进读取器并且属性反映当前节点的值。
此类实现 XmlReader 并符合 W3C 可扩展标记语言 (XML) 1.0 和“XML 中的命名空间”建议。XmlTextReader 提供以下功能:

  • 执行格式良好的 XML 的规则。
  • XmlTextReader 不提供数据验证。
  • 检查 DocumentType 节点是否是格式良好的。XmlTextReader 检查 DTD 的格式是否正确,但不使用 DTD 进行验证。
  • 对于 NodeType 为 XmlNodeType.EntityReference 的节点,返回单个空 EntityReference 节点(即 Value 属性为 String.Empty)。
  • 不展开默认属性。

因为 XmlTextReader 不执行数据验证所需的额外检查,所以它提供快速格式正确性分析器。

若要执行数据验证,请使用验证 XmlReader。有关更多信息,请参见 使用 XmlReader 验证 XML 数据。
若要从 XmlDocument 中读取 XML 数据,请使用 XmlNodeReader。
XmlTextReader 在发生 XML 分析错误时引发 XmlException。引发异常后,读取器的状态不可预知。例如,报告的节点类型可能不同于当前节点的实际节点类型。使用 ReadState 属性可以检查读取器是否处于错误状态。
有关 XmlReader 类的进一步论述,请参见 用 XmlReader 读取 XML。
安全注意事项:

  • 下面是使用 XmlTextReader 类时的注意事项。
  • XmlTextReader 引发的异常可能会泄漏您不希望冒泡到应用程序的路径信息。应用程序必须捕捉异常并进行相应的处理。
  • DTD 处理在默认情况下是启用的。如果担心出现拒绝服务问题或者正在处理不受信任的源,则应禁用 DTD 处理。将 ProhibitDtd 属性设置为 true 可禁用 DTD 处理。
  • 如果启用了 DTD 处理,则可使用 XmlSecureResolver 限制 XmlTextReader 可访问的资源。还可以设计应用程序以使 XML 处理受内存和时间的约束。例如,在 ASP.NET 应用程序中配置超时限制。
  • XML 数据可包括对 DTD 文件等外部资源的引用。在默认情况下,使用不具有用户凭据的 XmlUrlResolver 对象解析外部资源。通过执行下列操作之一,可以使此操作更加安全:
  • 通过将 XmlResolver 属性设置为 XmlSecureResolver 对象限制 XmlTextReader 可访问的资源。
  • 通过将 XmlResolver 属性设置为空引用(在 Visual Basic 中为 Nothing) 不允许 XmlReader 打开任何外部资源。
  • XML 数据可以包含大量需要很多时间才能处理的属性、命名空间声明、嵌套元素等。若要限制发送到 XmlTextReader 的输入的大小,请创建自定义的 IStream 实现并为其提供 XmlTextReader。
  • ReadValueChunk 方法可用于处理大的数据流。此方法一次读取少量字符,而不是为整个值分配一个字符串。
  • 默认情况下不展开常规实体。调用 ResolveEntity 方法时展开常规实体。

示例:
使用XmlTextReader从头到尾阅读xml文档,比较适合大量数据读取

static void Main(string[] args) 
    { 
      XmlTextReader reader; 
 
      if (File.Exists("student.xml"))//如果文件已存在,载入文档 
      { 
        reader = new XmlTextReader("student.xml"); 
      } 
      else//否则 
      { 
        return; 
      } 
 
      int count = 0; 
      while (reader.Read())//阅读下一个 
      { 
        if (reader.Name == "student") 
        { 
          //显示读取的属性和中间文本 
          Console.WriteLine(reader.GetAttribute("id") + " " + reader.GetAttribute("age") + " " + reader.ReadString()); 
          count++; 
        } 
      } 
      reader.Close();//关闭阅读器 
      Console.WriteLine("Count is " + count); 
      Console.ReadKey(); 
    } 
</div>

201648170644727.jpg (163×134)

 
当然也可以用xmlDocument进行结构化读取,但是读取前系统会把整个文档的结构获取进来

static void Main(string[] args) 
    { 
      XmlDocument doc = new XmlDocument(); 
 
      if (File.Exists("student.xml"))//如果文件已存在,载入文档 
      { 
        doc.Load("student.xml"); 
      } 
      else//否则 
      { 
        Console.WriteLine("文档不存在!"); 
        Console.ReadKey(); 
        return; 
      } 
 
      XmlNodeList list = doc.DocumentElement.SelectNodes("student");//读取根节点的所有子节点,放到XmlNodeList中 
 
      foreach (XmlNode node in list)//从list中遍历所有节点 
      { 
        XmlElement ele = (XmlElement)node;//节点可以有中间文本但是没有属性值,所以要先转成element才能读出属性值 
        Console.WriteLine(ele.GetAttribute("id") + " " + ele.GetAttribute("age") + " " + ele.InnerText);//读取数据/显示 
      } 
 
      Console.ReadKey(); 
    } 
</div>

201648170731876.jpg (281×164)

 执行效果完全一样

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 详解C#中三个关键字params,Ref,out
  • 详解三种C#实现数组反转方式
  • 详解C# 利用反射根据类名创建类的实例对象
  • 详解C#用new和override来实现抽象类的重写区别
  • 详解C#把DataTable中数据一次插入数据库的方法
  • 详解c# 类的构造方法
  • 详解C#多线程之线程同步
  • 详解C#中 Thread,Task,Async/Await,IAsyncResult的那些事儿
  • 详解C#中的委托
  • 详解C#中的out和ref

相关文章

  • 2017-05-28c#并行编程示例分享
  • 2017-05-28深入c#工厂模式的详解
  • 2017-05-28C++中const的实现细节介绍(C,C#同理)
  • 2017-05-28浅谈C#中的for循环与foreach循环
  • 2017-05-28C#实现把指定数据写入串口
  • 2017-05-28PowerShell 定时执行.Net(C#)程序的方法
  • 2017-05-28C#中实现可变参数实例
  • 2017-05-28C#透明窗体实现方法
  • 2017-05-28C#实现.net页面之间传值传参方法汇总
  • 2017-05-28浅谈C#2.0泛型中的变化:default关键字

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#基础之泛型委托实例教程
    • c#中executereader执行查询示例分享
    • C#数据结构与算法揭秘二 线性结构
    • C#实现图形位置组合转换的方法
    • C#串口通信实现方法
    • DevExpress实现自定义GridControl中按钮文字内容的方法
    • C#实现复制文件夹中文件到另一个文件夹的方法
    • c# winform多线程的小例子
    • C#对Access进行增删改查的完整示例
    • C#使用GET、POST请求获取结果

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有