4

我有两个大型 XML 文件(3GB,80000 条记录)。一个是另一个的更新版本。我想确定哪些记录已更改(已添加/更新/删除)。文件中有一些时间戳,但我不确定它们是否可信。与文件中的记录顺序相同。

这些文件太大而无法作为 XML 加载到内存中(即使是一个,也不要介意两者)。

我正在考虑的方式是在记录级别的第一个文件中使用 ID 的内存映射对内容偏移量进行某种解析/索引,然后流式传输第二个文件并使用随机访问来比较那些记录两者都存在。这可能需要 2 或 3 次通过,但没关系。但是我找不到可以让我这样做的简单库/方法。带有 VTDNavHuge 的 vtd-xml 看起来很有趣,但我无法理解(从文档中)它是否支持基于预保存位置的随机访问重新访问和加载记录。

Java 库/解决方案是首选,但 C# 也是可以接受的。

4

1 回答 1

1

只需使用 SAX 或 StAX 同时解析两个文档,直到遇到差异,然后退出。它不会将文档保存在内存中。任何标准 XML 库都将支持 S(t)AX。唯一的问题是,如果您认为元素的不同顺序无关紧要......

于 2013-07-23T01:19:28.303 回答