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

XMLUnit比较Xml忽略顺序

沈乐邦
2023-03-14

我需要比较使用自定义差异侦听器忽略子节点序列和属性列表序列的2个XML:

if (difference.getId() == DifferenceConstants.CHILD_NODELIST_SEQUENCE_ID ||
    difference.getId() == DifferenceConstants.ATTR_SEQUENCE_ID) 
return DifferenceListener.RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL; 

我的代码适用于:

    <xml>
        <elem1 att1="abc" att2="def"></elem1>
        <elem1></elem1>
    </xml>
    <xml>
        <elem1></elem1>
        <elem1 att2="def" att1="abc"></elem1>
    </xml>
<xml>
    <elem1>
      <elem2>
         <id>ABC</id>
         .....
      </elem2>
    </elem1>
    <elem1>
      <elem2>
         <id>DEF</id>
         .....
      </elem2>
    </elem1>
</xml>
<xml>
    <elem1>
      <elem2>
         <id>DEF</id>
         .....
      </elem2>
    </elem1>
    <elem1>
      <elem2>
         <id>ABC</id>
         .....
      </elem2>
    </elem1>
</xml>

我找到了一个临时的解决方案(8小时内不能在我自己的问题上添加评论):

我之前用:ElementNameAndAttributeQualifier重写了ElementQualifier,如果我将其更改为RecursiveElementNameAndTextQualifier,我可以得到我想要的结果

xmlDiff.overrideElementQualifier(new RecursiveElementNameAndTextQualifier());

还可以使用multiLevelElementNameandTextQualifier进行深度XML比较。递归仅用于第1级。

希望这对某人有帮助:)

共有1个答案

司徒池暝
2023-03-14

ElementQualifier告诉XMLUnit要比较哪些元素。如果内置的ElementQualifier对您不起作用,您可以自己提供接口的实现。

 类似资料:
  • 现在,如果我使用以下代码进行比较,我将在XMLUnit的帮助下相互比较两个xml文件 现在它给出了:预期的属性值'02',但是'01',但我不希望有差异,我希望表id是唯一的,如果在另一个文件中看到相同的表id,则只检查本例中的Main-Element:table->包含什么。

  • 问题内容: 假设我有两个xml字符串 如何编写一个比较这两个字符串并忽略元素顺序的测试? 我希望测试尽可能短,没有10行XML解析等的位置。我正在寻找一个简单的断言或类似内容。 我有这个(不起作用) 问题答案: 我原来的答案已经过时了。如果必须再次构建它,我将使用xmlunit 2和xmlunit- matchers。请注意,对于xml单元,不同的顺序始终是“相似”而不是相等。 如果有人仍然不想使

  • 我正在尝试比较自定义对象的列表。我设置了LEVENSHTEIN_DISTANCE并创建了自定义比较器。对象之间唯一的区别是列表中值的顺序。我希望“没有变化”,但我得到了listchange。结果和示例如下。我做错了什么? 非常感谢和问候,安德烈

  • 问题内容: 我有两个XML文件: 在比较这两个文件时,我不得不忽略Node 的属性:。 我正在使用: 大多数在线解决方案建议实施: 也尝试过该操作,但这会忽略所有具有属性ID的节点,而我想忽略特定节点的属性: 我的Test类中的调用方法: 有人可以建议我一种使用XMLUnit 2.x的新方法来实现此目标,请相应地提供帮助。 提前致谢。 问题答案: 如果您确实愿意,可以使用一个。您只需要做的就是测试

  • 问题内容: 我有这样的XML消息: 我想将被测试方法产生的这种类型的消息与预期的消息进行比较,但我不在乎。因此,我希望以上消息被认为等于: 我正在使用XMLUnit的最新版本。 我在想答案是创建一个习惯。如果有准备好要使用的东西,我只是不想重新发明轮子。 欢迎使用XMLUnit以外的库的建议。 问题答案: 自从回答了这个问题以来,XMLUnit发生了很多变化。 现在,您可以在使用时轻松忽略节​​点

  • 当我执行时,结果显然是。但是我想忽略“nullable”参数,不管它是false还是true,如果结构相同,它应该返回。 有可能吗?