gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 28 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章详解C#借助.NET框架中的XmlTextReader类读取XML的方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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文档,比较适合大量数据读取 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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();
     }

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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();
     }

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

 执行效果完全一样 。

最后此篇关于详解C#借助.NET框架中的XmlTextReader类读取XML的方法的文章就讲到这里了,如果你想了解更多关于详解C#借助.NET框架中的XmlTextReader类读取XML的方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com