我需要在 C# 中对相当大的 XML 文件(这里可能超过千兆字节)进行一些处理,包括执行一些复杂的 xpath 查询。我遇到的问题是,我通常通过 System.XML 库执行此操作的标准方式喜欢在对整个文件执行任何操作之前将整个文件加载到内存中,这可能会导致这种大小的文件出现内存问题。
我根本不需要更新文件,只需阅读它们并查询其中包含的数据。一些 XPath 查询非常复杂,并且涉及多个级别的父子类型关系——我不确定这是否会影响使用流读取器而不是将数据作为块加载到内存中的能力。
我可以看到使其工作的一种方法是使用基于流的方法执行简单的分析,并且可能将 XPath 语句包装到 XSLT 转换中,然后我可以在文件中运行,尽管它看起来有点复杂。
或者,我知道 XPath 查询不会遇到某些元素,所以我想我可以根据它的原始树结构将文档分成一系列较小的片段,这些片段可能足够小,可以在内存中处理而无需造成太大的破坏。
我试图在这里解释我的目标,所以如果我在一般方法方面完全错误的树,我相信你们可以让我正确......