如何使用 XMLUnit 的 DetailedDifference 忽略相同元素的顺序?
How do I ignore order of identical elements with XMLUnit's DetailedDifference?
我想使用 XMLUnit 比较两个 xml 文件。我希望 DetailedDiff 不会将不同订单中的相同标签报告为差异。例如,如果我用这两个片段创建了一个 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
会说文档是 "similar" 而不是 "identical"。因此,您要么忽略可恢复的差异,要么必须覆盖 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;
}
接受默认值但仅降级乱序差异。
我想使用 XMLUnit 比较两个 xml 文件。我希望 DetailedDiff 不会将不同订单中的相同标签报告为差异。例如,如果我用这两个片段创建了一个 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
会说文档是 "similar" 而不是 "identical"。因此,您要么忽略可恢复的差异,要么必须覆盖 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;
}
接受默认值但仅降级乱序差异。