在C#中使用XmlReader读取Xml

在C#中使用XmlReader读取Xml,第1张

在C#中使用XmlReader读取Xml

我的经验

XmlReader
是,偶然阅读过多很容易。我知道您已经说过要尽快阅读它,但是您是否 尝试过 使用DOM模型呢?我发现LINQ to
XML使XML的工作容易 得多

如果您的文档特别大,则可以

XmlReader
通过流方式为每个“外部”元素创建一个
XElement
from 来合并和LINQ to XML
XmlReader
:这使您可以完成LINQ to
XML的大部分转换工作,但仍然只需要随时可以将一小部分文档存储在内存中。这是一些示例代码(从本博客文章中略作修改):

static IEnumerable<XElement> SimpleStreamAxis(string inputUrl,  string elementName){  using (XmlReader reader = XmlReader.Create(inputUrl))  {    reader.MoveToContent();    while (reader.Read())    {      if (reader.NodeType == XmlNodeType.Element)      {        if (reader.Name == elementName)        {          XElement el = XNode.ReadFrom(reader) as XElement;          if (el != null)          { yield return el;          }        }      }    }  }}

我曾经用它来将StackOverflow用户数据(巨大)转换成另一种格式-效果很好。

由乔恩(Jon)重新格式化的Radarbob的EDIT-尽管目前尚不清楚是指哪个“读得太远”的问题…

这应该简化嵌套,并解决“读取过多”问题。

using (XmlReader reader = XmlReader.Create(inputUrl)){    reader.ReadStartElement("theRootElement");    while (reader.Name == "TheNodeIWant")    {        XElement el = (XElement) XNode.ReadFrom(reader);    }    reader.ReadEndElement();}

这解决了“读取过多”问题,因为它实现了经典的while循环模式:

initial read;(while "we're not at the end") {    do stuff;    read;}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/4972406.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存