尝试获取这两个类似的 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);
Run Code Online (Sandbox Code Playgroud)
您需要做两件事:
DifferenceListener来降低差异默认情况ElementQualifier下Diff,ElementNameQualifier仅比较具有相同本地名称和名称空间 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) { }
});
Run Code Online (Sandbox Code Playgroud)创建“相似”的结果。为了获得“相同”的结果,您还需要降低CHILD_NODELIST_SEQUENCE_ID差异的等级。