【问题标题】:How can you filter a Deeply Nested XML using LINQ (streaming only), while maintaining the Tree Structure?如何使用 LINQ(仅限流式传输)过滤深度嵌套的 XML,同时保持树结构?
【发布时间】:2009-06-22 15:23:04
【问题描述】:

我想知道如何使用 LINQ 流式传输非常大、深度嵌套的 XML 文档,在流式传输时,根据某些标准过滤节点,然后将流式输出写入文件,同时保持相同的原始结构的 XML。

这应该不会将整个文档加载到内存中。

这可能吗?

【问题讨论】:

    标签: xml linq streaming


    【解决方案1】:

    LINQ to XML 不支持直接以流方式读取,但我已成功使用XmlReader,基于that 进行过滤,然后将其传递给XElement.Load当我发现我感兴趣的子树时。它假定子树足够小以适合内存。当Load 返回时,阅读器将被移出该子树,您可以继续前进,直到找到下一个相关的子树,等等。

    有关更多信息和示例代码,请参阅this MSDN blog post

    (这是我对 Stack Overflow 数据转储所做的,顺便说一句 :)

    【讨论】:

    • 嗨,Jon 搞笑,我刚刚在看你的这个视频,同时发布了这个答案:skillsmatter.com/podcast/open-source-dot-net/… 关于答案,这不会导致输出平坦吗?我知道如何使用 XMLReader 在 XML 中流式传输并将其一一提供给 LINQ,我的问题是在过滤时我丢失了输出上的 XML 结构。
    【解决方案2】:

    这篇论文包含了我的问题的答案:

    http://homepages.cwi.nl/~ralf/api-streaming-xml/

    特别展示了如何在流式传输时过滤结果时维护原始 XML 的树结构。

    【讨论】:

      【解决方案3】:

      有关 XML 流式处理选项,请查看 XML 团队关于使用 LINQ to XML 进行流式处理的讨论,该讨论以 http://blogs.msdn.com/xmlteam/archive/2007/03/05/streaming-with-linq-to-xml-part-1.aspx 开头。意识到这是一个早期的博客系列,在最终版本中对实现细节进行了一些更改。

      【讨论】:

      • 嗨,我读到了,问题是他们没有深入处理深度嵌套的结构。他们确实在该系列的未来第 3 部分中提到了这一点,但我永远找不到它,我只能找到第 1 部分和第 2 部分。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 2022-08-03
      • 2020-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多