XMLUNIT忽略xmlns?

时间:2014-10-23 08:40:53

标签: java xml xmlunit

尝试让这两个类似的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);

1 个答案:

答案 0 :(得分:2)

您需要做两件事:

  • 为了忽略不同的命名空间,您需要提供降低差异的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) { }
        });
    

创建一个类似的&#34;结果。为了得到一个相同的&#34;结果您还需要降低CHILD_NODELIST_SEQUENCE_ID差异。

相关问题