java - 如何使用 XMLUnit 详细差异忽略相同元素的顺序?

标签 java xmlunit

我想使用 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 顺序不正确,但除此之外文档是相同的。

无序的元素构成可恢复的差异,因此 DiffDetailedDiff 会说文档“相似”,但不“相同”。因此,要么忽略可恢复的差异,要么必须覆盖 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/

相关文章:

java - 尝试使用 java 运行 sql 查询时出现 406 错误

java - 为什么这两个 xml 字符串不相似

java - 将字符串添加到 ArrayList

java - 比较两个大型 xml 文件时出现内存不足错误

java - XMLUnit比较忽略元素的顺序

java - XMLUnit 嵌套元素测试

xml - XmlUnit 是否有任何替代方案?

java - 调试eclipse单元测试代码 "Test class should have exactly one"和 "Workspace is closed"错误

java - 如何将值从一个类的 onOptionsItemSelected 方法传递到另一个类

java - 使用 Spring Boot CLI 初始化项目时,如何指定 "parameters"(例如 language = groovy)?