XMLUnit 比较 XML 忽略序列

XMLUnit Compare Xml Ignoring Sequence

提问人:Rahul Dabas 提问时间:7/19/2013 最后编辑:Rahul Dabas 更新时间:10/7/2015 访问量:3866

问:

我需要比较我使用的自定义差异侦听器的 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也是相同的:

<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>

在这里,我想进行比较,以考虑两个 XML 中的两个 elem1 是相同的,因为只有序列被混淆了。因此,我需要我的代码适用于多个嵌套级别。XMLUnit 可能吗? 请帮助任何人?

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

我之前用以下命令覆盖了 ElementQualifier:ElementNameAndAttributeQualifier,如果我将其更改为 RecursiveElementNameAndTextQualifier,我可以得到我想要的结果

xmlDiff.overrideElementQualifier(new RecursiveElementNameAndTextQualifier());

还可以使用 multiLevelElementNameandTextQualifier 进行更深层次的 XML 比较。递归仅适用于 1 级。

有关更多详细信息,您可以参考: http://xmlunit.sourceforge.net/userguide/html/ar01s03.html#ElementQualifier 示例 20

我需要匹配元素名称和属性,这与名称和文本匹配。但仍然......现在它正在工作,所以我正在使用它......

如果我找到更好的解决方案,将更新

希望这对:)的人有所帮助

XML 比较 xmlunit

评论

0赞 Rahul Dabas 7/24/2013
RecursiveElementNameAndTextQualifier 对我不起作用。我需要类似的东西: RecursiveElementNameAndAttributeQualifier 它不存在于 XMLUnit1.4 中: 1. 匹配 NodeName+AttributeList 以找到可比较的节点 2.匹配 NodeValues,然后确定是否可以接受 ElementNameAndAttributeQulalfier 和 RecursiveElementNameAndTextQualifier 的混合。有人有什么建议吗?
0赞 Montolide 11/23/2014
您好,您找到可以回答您答案的东西了吗?我和你有同样的麻烦......编辑!!!刚找到它...ElementNameAndAttributeQualifier 对我有用 =)

答:

0赞 Stefan Bodewig 2/4/2015 #1

ElementQualifier是告诉 XMLUnit 要比较哪些元素的原因。如果内置的 s 不适合你,你可以自己提供接口的实现。ElementQualifier