2

我想使用 XMLUnit 比较两个 xml 文件。我希望DetailedDiff 不会将不同顺序的相同标签报告为差异。例如,如果我用这两个片段创建了DetailedDiff:

 <a><b/><c/></a>

<a><c/><b/></a>

由于 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;
}
4

1 回答 1

5

RecursiveElementNameAndTextQualifier将产生与默认值相同的结果ElementNameQualifier- b 和 c 无序,但文档相同。

无序的元素构成可恢复的差异,因此Diff并且DetailedDiff会说文档“相似”但不“相同”。因此,要么忽略可恢复的差异,要么必须覆盖DifferenceListener而不是将类型差异从(默认)ElementQualifier降级为. 就像是CHILD_NODELIST_SEQUENCE_IDRETURN_IGNORE_DIFFERENCE_NODES_SIMILARRETURN_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;
}

它接受默认值,但仅降级无序差异。

于 2015-06-27T16:25:40.997 回答