XMLUnit比较Xml忽略序列

时间:2013-07-18 18:29:04

标签: xml comparison xmlunit

我需要比较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小时内对我自己的问题添加评论):

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

xmlDiff.overrideElementQualifier(new RecursiveElementNameAndTextQualifier());

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

有关详细信息,请参阅:http://xmlunit.sourceforge.net/userguide/html/ar01s03.html#ElementQualifier示例20

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

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

希望这对某人有用:)

1 个答案:

答案 0 :(得分:0)

ElementQualifier告诉XMLUnit要比较哪些元素。如果内置ElementQualifier不适合您,您可以自己提供界面实现。