我想使用XMLUnit比较两个xml文件.我希望DetailedDiff不以不同的顺序报告相同的标签作为差异.例如,如果我使用这两个片段创建了一个DetailedDiff:
<a><b/><c/></a>
Run Code Online (Sandbox Code Playgroud)
和
<a><c/><b/></a>
Run Code Online (Sandbox Code Playgroud)
由于b和c标签乱序,DetailedDiff将创建两个差异.我已经尝试重写元素限定符,但它不会导致任何更改.我做错了什么或者这与XMLUnit无关?这里的参考是我用来比较两个xml文件的代码(不包括overrideElementQualifier调用).
public List<Difference> getDifferenceList(Reader file1, Reader file2) {
Diff d = new Diff(file1, file2); //I'm passing the args as FileReaders
d.overrideElementQualifier(new RecursiveElementNameAndTextQualifier());
detailedDiff = new DetailedDiff(d);
List<Difference> allDifferences = detailedDiff.getAllDifferences();
return allDifferences;
}
Run Code Online (Sandbox Code Playgroud)
RecursiveElementNameAndTextQualifier将产生与默认值相同的结果ElementNameQualifier- b和c无序,但除了文档相同之外.
无序的元素构成可恢复的差异,因此Diff并且DetailedDiff会说文档"相似"但不"相同".因此要么忽略可恢复的差异,要么必须覆盖DifferenceListener而不是将ElementQualifier类型的差异CHILD_NODELIST_SEQUENCE_ID从RETURN_IGNORE_DIFFERENCE_NODES_SIMILAR(默认)降级为RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL.就像是
public int differenceFound(Difference difference) {
return difference.getId() == DifferenceConstants.CHILD_NODELIST_SEQUENCE_ID
? RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL
: RETURN_ACCEPT_DIFFERENCE;
}
Run Code Online (Sandbox Code Playgroud)
它接受默认值,但只降低了无序差异.
| 归档时间: |
|
| 查看次数: |
2174 次 |
| 最近记录: |