我认为我有一个相当独特的问题需要解决。好吧,我无法使用谷歌找到足够的信息。所以在这里,
我在Java EE SOA应用程序上工作,该应用程序使用Oracle XML DB将XML文档存储为XML。每当XML发生变化时,我都会增加版本并将以前的版本放到另一个表中。
现在的要求是,我应该将两个版本之间的差异存储为XML,而不是整个XML文档。
感谢您的时间。
答案 0 :(得分:10)
在我上一份工作中,我们遇到了类似的问题:我们必须检测两个XML文件之间特定项的更改,插入和删除。这些文件不是任意的XML;他们必须遵守我们的XSD。
我们的解决方案是实现一种合并排序:解析文件(使用SAX解析器,而不是DOM解析器,以允许任意大的文件),并将解析的数据存储在单独的HashMaps中。然后,我们使用合并排序类型的算法比较两个地图的内容。
当然,文件越大,我们遇到的内存压力就越大,所以我最终编写了一个FileHashMap类,将HashMap的值空间推送到随机访问文件。虽然理论上速度较慢,但这种解决方案允许我们比较使用非常大的文件,而不会出现颠簸或OutOfMemoryError条件。 (该库中提供了该FileHashMap类的一个版本:http://www.clapper.org/software/java/util/)
我不知道我刚刚描述的内容是否与您需要的内容非常接近,但我认为我会分享它,以防万一。
祝你好运。答案 1 :(得分:8)
答案 2 :(得分:4)
您可以使用Java编写任意数量的开源XML diff工具。这些工具的一个列表是here。
答案 3 :(得分:1)
尝试使用Pretty Diff。它旨在使用基本XML语法的几个不同扩展。