【问题标题】:Parse xml in c# : combine xmlreader and linq to xml在 c# 中解析 xml:将 xmlreader 和 linq 结合到 xml
【发布时间】:2011-08-11 15:37:09
【问题描述】:

我必须在 C# 中解析大型 XML 文件。我使用 LINQ-to-XML。我有一个像

这样的结构
<root>
       <node></node>
       <node></node>
</root>

我想使用XmlReader 在每个节点上循环并使用 LINQ-to-XML 来获取每个节点并对其进行处理?

所以我的内存中只有当前节点。

【问题讨论】:

  • 您的实际问题是什么?
  • @msarchet,我想这个问题很清楚......他想在每个&lt;node&gt;元素上使用Linq to XML,但是使用XmlReader来获取这些元素,以避免加载整个内存中的文档
  • Linq To XML, yield and others 的可能重复项

标签: .net xml linq-to-xml large-files xmlreader


【解决方案1】:

你可以这样做:

string path = @"E:\tmp\testxml.xml";
using (var reader = XmlReader.Create(path))
{

    bool isOnNode = reader.ReadToDescendant("node");
    while (isOnNode)
    {
        var element = (XElement)XNode.ReadFrom(reader);

        // Use element with Linq to XML
        // ...

        isOnNode = reader.ReadToNextSibling("node");
    }
}

【讨论】:

  • 它可以工作,但在某些情况下我有一个错误:无法将“System.Xml.Linq.XText”类型的对象转换为“System.Xml.Linq.XElement xmlreader”。我不知道为什么,所以我在转换之前进行了测试(我测试了节点类型)。但我不知道我是否会失去结果
  • @bobosh,我不确定是什么导致了这个问题...你能发布导致问题发生的 XML 文档的子集吗?
  • 它总是相同的模板。在我使用 xdocument 在节点“节点”上循环之前,我没有问题。在 2000 条记录中,我丢失了 3 条记录。此记录没有任何变化
  • 嗯,它们一定有一些东西不同,否则行为将是相同的......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-27
  • 2016-12-11
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
相关资源
最近更新 更多