当前位置: 首页 > 知识库问答 >
问题:

将XML相等的文件(空白除外)与xmlunit进行比较会产生差异

东方修谨
2023-03-14

使用xmlunit(版本2.6.0)比较两个XML文件,当它们应该被视为相等时,会产生差异。

XML 1:

<top><a>one</a><b>two</b></top>
<top>
  <a>one</a>
  <b>two</b>
</top>
DefaultNodeMatcher nodeMatcher = new DefaultNodeMatcher(ElementSelectors.byNameAndText);

Diff d = DiffBuilder.compare(xmlSource1)
            .withNodeMatcher(nodeMatcher)
            .withTest(xmlSource2).build();
    Iterable<Difference> diffList = d.getDifferences();
    Iterator<Difference> iterator = diffList.iterator();
    while(iterator.hasNext()) {
        Difference next = iterator.next();
        log.info("Difference: " + next);
    }
Difference: Expected child 'top' but was 'null' - comparing <top...> at /top[1] to <NULL> (DIFFERENT)
Difference: Expected child 'null' but was 'top' - comparing <NULL> to <top...> at /top[1] (DIFFERENT)

问:为什么他们被认为是不同的?如何通过忽略空格差异来进行这种比较?理想情况下,我希望.hasdifferences()为false。

共有1个答案

龚威
2023-03-14

只需忽略空白空间(和注释)并检查差异中不包括相似性的地方(请参见checkforsalimal()):

Diff d = DiffBuilder.compare(xmlSource1).withTest(xmlSource2)
 .checkForSimilar()
 .withNodeMatcher(nodeMatcher)
 .ignoreWhitespace()
 .ignoreComments()
 .build();
 类似资料:
  • 有了这个,我会检查服务最后一次运行的时间,以及是否有必要再次运行。 我正在将当前日期转换为整数。但后来我得到一个错误:错误: 08-27 17:21:40.930:W/System.err(26577):java.lang.NumberFormatException:无效int:“201308271721” 08-27 17:21:40.930:W/System.err(26577):java.l

  • 在我的JUnit测试中,我将预期的XML文件与解析器创建的虚拟文档进行比较: 但区别声称并不相似。那么如何正确比较这两个XML文档呢?

  • JavaScript 有两种方式判断两个值是否相等。 等于操作符 等于操作符由两个等号组成:== JavaScript 是弱类型语言,这就意味着,等于操作符会为了比较两个值而进行强制类型转换。 "" == "0" // false 0 == "" // true 0 == "0"

  • 我需要比较使用自定义差异侦听器忽略子节点序列和属性列表序列的2个XML: 我的代码适用于: 我找到了一个临时的解决方案(8小时内不能在我自己的问题上添加评论): 我之前用:ElementNameAndAttributeQualifier重写了ElementQualifier,如果我将其更改为RecursiveElementNameAndTextQualifier,我可以得到我想要的结果 还可以使用

  • 我正在尝试验证和检查两个XML文件之间的差异。 XML文件1: 我应该如何比较这两个文件包含相同的信息(不关心信息的生成顺序),有什么想法吗?

  • 问题内容: 首先采取klurudge解决方案,使用哨兵方法(必须让您的程序不允许输入哨兵值): 假设您忘记了阻止程序中的哨兵值,用户在B字段中输入了-2147483648,而A为空。上面的代码报告为true,应报告为false,不应报告为true或null。 比较可为空字段上的相等性的最简洁方法是什么?A == B仅应报告true或false,而不管该字段是否可为空。 问题答案: 也许IS [NO