比较两个xml文件并获得差异

时间:2017-10-06 10:18:30

标签: 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,但我不想使用它。

1 个答案:

答案 0 :(得分:0)

您可以使用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/

Diff demo: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