如何使用 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 乱序但除此之外文档是相同的。

乱序的元素构成可恢复的差异,因此 DiffDetailedDiff 会说文档是 "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;
}

接受默认值但仅降级乱序差异。