我想使用 XMLUnit 比较两个 xml 文件。我希望详细差异不将不同顺序的相同标签报告为差异。例如,如果我使用这两个片段创建了DetailedDiff:
<a><b/><c/></a>
和
<a><c/><b/></a>
DetailedDiff 将创建两个差异,因为 b 和 c 标签是乱序的。我尝试过覆盖元素限定符,但它不会导致任何更改。我是否做错了什么或者 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;
}
最佳答案
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;
}
它接受默认值,但仅降级无序差异。
关于java - 如何使用 XMLUnit 详细差异忽略相同元素的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31057788/