有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaXMLDiff和Merge

我想我有一个非常独特的问题要解决。嗯,我用谷歌找不到足够的信息。就这样

我在一个JavaEESOA应用程序上工作,该应用程序使用OracleXMLDB将XML文档存储为XML。每当XML发生变化时,我都会增加版本,并将以前的版本放入另一个表中

现在的要求是,我应该将两个版本之间的差异存储为XML,而不是整个XML文档

  1. 有没有可以进行XML比较的Java库?(XMLUnit,…)
  2. 是否有一个标准的XML模式来捕获XML差异
  3. 我可以使用什么转换技术将“差异”应用于XML,以便在不同版本之间来回转换?(XSLT、Groovy……?)

谢谢你抽出时间


共 (3) 个答案

  1. # 1 楼答案

    在我的上一份工作中,我们遇到了类似的问题:我们必须检测两个XML文件之间特定项的更改、插入和删除。这些文件不是任意的XML;他们必须遵守我们的XSD

    我们的解决方案是实现一种合并排序:解析文件(使用SAX解析器,而不是DOM解析器,以允许任意大的文件),并将解析后的数据存储在单独的哈希映射中。然后,我们使用合并排序类型的算法比较了两个地图的内容

    当然,文件越大,我们经历的内存压力就越大,所以我最终编写了一个FileHashMap类,将HashMap的值空间推送到随机访问文件。虽然理论上比较慢,但这种解决方案允许我们对非常大的文件进行比较,而不会出现抖动或OutOfMemoryError情况。(该FileHashMap类的一个版本在此库中提供:http://www.clapper.org/software/java/util/

    我不知道我刚才描述的内容是否与你的需求有一点点接近,但我想我会分享一下,以防万一

    祝你好运

  2. # 2 楼答案

    有很多用Java编写的开源XML diff工具可以供借鉴。此类工具的一个列表是here

  3. # 3 楼答案

    尝试使用Pretty Diff。它设计用于在基本XML语法上使用几种不同的扩展

    http://prettydiff.com/