我的经验
XmlReader是,偶然阅读过多很容易。我知道您已经说过要尽快阅读它,但是您是否 尝试过 使用DOM模型呢?我发现LINQ to
XML使XML的工作容易 得多 。
如果您的文档特别大,则可以
XmlReader通过流方式为每个“外部”元素创建一个
XElementfrom 来合并和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;}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)