JavaXMLDiff和Merge
我想我有一个非常独特的问题要解决。嗯,我用谷歌找不到足够的信息。就这样
我在一个JavaEESOA应用程序上工作,该应用程序使用OracleXMLDB将XML文档存储为XML。每当XML发生变化时,我都会增加版本,并将以前的版本放入另一个表中
现在的要求是,我应该将两个版本之间的差异存储为XML,而不是整个XML文档
- 有没有可以进行XML比较的Java库?(XMLUnit,…)李>
- 是否有一个标准的XML模式来捕获XML差异李>
- 我可以使用什么转换技术将“差异”应用于XML,以便在不同版本之间来回转换?(XSLT、Groovy……?)李>
谢谢你抽出时间
# 1 楼答案
在我的上一份工作中,我们遇到了类似的问题:我们必须检测两个XML文件之间特定项的更改、插入和删除。这些文件不是任意的XML;他们必须遵守我们的XSD
我们的解决方案是实现一种合并排序:解析文件(使用SAX解析器,而不是DOM解析器,以允许任意大的文件),并将解析后的数据存储在单独的哈希映射中。然后,我们使用合并排序类型的算法比较了两个地图的内容
当然,文件越大,我们经历的内存压力就越大,所以我最终编写了一个FileHashMap类,将HashMap的值空间推送到随机访问文件。虽然理论上比较慢,但这种解决方案允许我们对非常大的文件进行比较,而不会出现抖动或OutOfMemoryError情况。(该FileHashMap类的一个版本在此库中提供:http://www.clapper.org/software/java/util/)
我不知道我刚才描述的内容是否与你的需求有一点点接近,但我想我会分享一下,以防万一
祝你好运
# 2 楼答案
有很多用Java编写的开源XML diff工具可以供借鉴。此类工具的一个列表是here
# 3 楼答案
尝试使用Pretty Diff。它设计用于在基本XML语法上使用几种不同的扩展
http://prettydiff.com/