2

尝试让这两个 XML 类似(想忽略 xmlns)和不同的元素序列,但对我来说不能正常工作。如果删除 xmlns,则 doc 是 simmilr。我正在使用 XMlUnit 1.5

String s1 = "<root xmlns=\"http:example.com\">"
                        +"<Date/>"
                        +"<Time/>"
                     +"</root>";

String s2 = "<root>"
                      +"<Time/>"
                      +"<Date/>"
                   +"</root>";
myDiff = XMLUnit.compareXML(s1,s2);
4

1 回答 1

5

您需要做两件事:

  • 为了忽略不同的命名空间,您需要提供一个DifferenceListener降低差异的
  • ElementQualifier使用的默认值DiffElementNameQualifier仅比较具有相同本地名称和命名空间 URI 的元素。您还需要覆盖这个。

    Diff xmlDiff = new Diff(s1, s2);
    xmlDiff.overrideElementQualifier(new ElementNameQualifier() {
            @Override
            protected boolean equalsNamespace(Node control, Node test) {
                return true;
            }
        });
    xmlDiff.overrideDifferenceListener(new DifferenceListener() {
            @Override
            public int differenceFound(Difference diff) {
                if (diff.getId() == DifferenceConstants.NAMESPACE_URI_ID) {
                    return RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL;
                }
                return RETURN_ACCEPT_DIFFERENCE;
            }
            @Override
            public void skippedComparison(Node arg0, Node arg1) { }
        });
    

创建一个“相似”的结果。为了获得“相同”的结果,您还需要降级CHILD_NODELIST_SEQUENCE_ID差异。

于 2015-02-03T19:15:01.607 回答