我有两个大型XML文件(3GB,80000条记录)。一个是另一个的更新版本。我想确定哪些记录已更改(已添加/更新/删除)。文件中有一些时间戳,但我不确定它们是否可以信任。与文件中的记录顺序相同。
这些文件太大,无法像XML一样加载到内存中(即使是一个,也不用考虑两者)。
我正在考虑的方法是使用内存中的ID映射对记录级别的第一个文件中的内容偏移进行某种解析/索引,然后流式传输第二个文件并使用随机访问进行比较两者中都存在的那些记录。这可能需要2或3次通过,但这很好。但我找不到容易让我这么做的图书馆/方法。带有VTDNavHuge的vtd-xml看起来很有趣,但我无法理解(来自文档)它是否支持随机访问重新访问和基于预先保存的位置加载记录。
首选Java库/解决方案,但C#也可以接受。
答案 0 :(得分:1)
使用SAX或StAX同时解析两个文档,直到遇到差异,然后退出。它不会将文档保存在内存中。任何标准XML库都支持S(t)AX。唯一的问题是如果你认为不同的元素顺序是无关紧要的......