4

我需要比较我正在使用忽略子节点序列和属性列表序列的自定义差异侦听器的 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

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

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

希望这对某人有帮助:)

4

1 回答 1

0

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

于 2015-02-03T16:39:58.903 回答