首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何最好地在.NET中对非常大的XML文件使用XPath?

如何最好地在.NET中对非常大的XML文件使用XPath?
EN

Stack Overflow用户
提问于 2009-01-02 16:39:24
回答 8查看 17K关注 0票数 17

我需要在C#中对相当大的XML文件(这里很大,可能超过1 on )进行一些处理,包括执行一些复杂的xpath查询。我遇到的问题是,我通常通过System.XML库执行此操作的标准方式是在对整个文件执行任何操作之前将整个文件加载到内存中,这可能会导致这种大小的文件出现内存问题。

我根本不需要更新文件,只需读取它们并查询其中包含的数据即可。一些XPath查询相当复杂,涉及多个级别的父子类型关系-我不确定这是否会影响使用流读取器的能力,而不是将数据作为块加载到内存中。

我能看到的一种方法是使用基于流的方法执行简单的分析,也许还可以将XPath语句包装到XSLT转换中,之后我可以在文件中运行这些转换,尽管这看起来有点复杂。

或者,我知道有一些元素是XPath查询不会遇到的,所以我猜我可以根据文档的原始树结构将文档拆分成一系列较小的片段,这些片段可能足够小,可以在内存中处理,而不会造成太大的破坏。

我已经试图在这里解释我的目标,所以如果我在一般方法方面完全找错了方向,我相信你们可以纠正我……

EN

回答 8

Stack Overflow用户

发布于 2009-04-04 06:44:52

XPathReader就是答案。它不是C#运行时的一部分,但可以从微软下载。这是一个MSDN article

如果使用XmlTextReader构造XPathReader,则可以利用XPath表达式的便利性获得流读取的效率。

我还没有在千兆字节大小的文件上使用过它,但我已经在几十兆字节的文件上使用过它,这通常足以减慢基于DOM的解决方案。

引用自下面的内容:“XPathReader提供了以流方式在XML文档上执行XPath的能力”。

Download from Microsoft

票数 9
EN

Stack Overflow用户

发布于 2011-02-16 17:31:14

http://msdn.microsoft.com/en-us/library/bb387013.aspx有一个利用XStreamingElement的相关示例。

票数 2
EN

Stack Overflow用户

发布于 2009-01-02 16:49:02

你已经概述了你的选择。

要么需要放弃XPath并使用XmlTextReader,要么需要将文档拆分成可以使用XPath的可管理块。

如果您选择后者,使用XPathDocument,它的只读限制可以更好地利用内存。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/407350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档