如何在保持树结构的同时使用LINQ(仅限流)过滤深层嵌套XML?

时间:2009-06-22 15:23:05

标签: xml linq streaming

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

这应该在不将整个文档加载到内存中的情况下发生。

这可能吗?

3 个答案:

答案 0 :(得分:1)

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

有关详细信息和示例代码,请参阅XElement.Load

(这是我用Stack Overflow数据转储做的,顺便说一下:)

答案 1 :(得分:1)

本文包含我的问题的答案:

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

具体来说,它展示了在流式传输过滤结果时如何维护原始XML的树结构。

答案 2 :(得分:0)

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