java - 比较两个 xml 文件并获取差异

标签 java xml dom

我正在尝试比较两个 XML 文件。我的要求是比较新旧 xml 文件,如果有任何差异,请将其合并到新 xml 文件中。

下面的代码片段告诉我两个文件是否相等。

public static void compare() throws SAXException, IOException, ParserConfigurationException{
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setNamespaceAware(true);
    dbf.setCoalescing(true);
    dbf.setIgnoringElementContentWhitespace(true);
    dbf.setIgnoringComments(true);
    DocumentBuilder db = dbf.newDocumentBuilder();

    Document doc1 = db.parse(new File("old.xml"));
    doc1.normalizeDocument();

    Document doc2 = db.parse(new File("new.xml"));
    doc2.normalizeDocument();

   System.out.println (doc1.isEqualNode(doc2));
}

但我也想要差异。请告诉我如何获得差异。

我已经尝试过XMLUnit ,但我不想使用它。

最佳答案

您可以使用 jaxb 解析 xml 并使用 unmarshall 方法构造 java 对象,并比较生成的对象。

在这里查看:How to compare jaxb, object, string to find differences

您还可以使用 google diff-match-patch api 将两个 xml 作为字符串进行比较,并修补以创建新的。

https://code.google.com/archive/p/google-diff-match-patch/

差异演示:https://neil.fraser.name/software/diff_match_patch/svn/trunk/demos/demo_diff.html 补丁演示:https://neil.fraser.name/software/diff_match_patch/svn/trunk/demos/demo_patch.html

来源可在 github 上找到:https://github.com/GerHobbelt/google-diff-match-patch

关于java - 比较两个 xml 文件并获取差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46603509/

相关文章:

Java - 添加到 DOM XML 文件

javascript - 如何正确地将单击的按钮属性值传递给表单提交事件?

java - Java 1.5 是否有默认的 -Xmx 设置?

java - 在 B 继承自 A 的情况下创建了多少个对象?

java - Java读取文件,输出第一个逗号分隔的字符串

xml - 查询 xml 列的一部分作为结果集

c# - 从 c# 中的 xml 字符串读取属性的最佳方法是什么

python - 如何在不重写 JSON 对象的其余部分的情况下就地编辑 JSON 元素?

javascript - 窗口调整大小触发的 DOM 事件

java - 为什么多次加0.1仍然无损?