当有多个元素具有相同的标记名称时,XMLUnit的ElementQualifier会混淆

时间:2014-12-15 22:25:54

标签: java xml dom junit xmlunit

我正在尝试比较以下两个XML ...我正在进行相似性测试。

XML1

<top> <first>true</first> <!--- control node 1 ----> <second> <!--- control node 2 ----> <secondpart1>ooo</secondpart1> </second> <third> <!--- control node 3 ----> <thirdpart1>zzzz</thirdpar1> </third> <third> <!--- control node 4 ----> <thirdpart1>zzzz</thirdpar1> <thirdpart2>zzzz</thirdpar2> </third> </top>

XML2

<top> <second> <!--- test node 1 ----> <secondpart1>ooo</secondpart1> </second> <third> <!--- test node 2 ----> <thirdpart1>zzzz</thirdpar1> </third> <third> <!--- test node 3 ----> <thirdpart1>zzzz</thirdpar1> <thirdpart2>zzzz</thirdpar2> </third> <first>true</first> <!--- test node 4 ----> </top>

我收到此错误

[不同]预期的子节点数&#39; 1&#39;但是&#39; 2&#39;。看起来它将控制节点3与测试节点3进行比较。由于元素的名称匹配&#34;第三&#34;,它进行比较。有这种情况的工作吗?

这是我的代码

    Diff d = new Diff(xmlResponseTrim, serializedResponseTrim);
    DetailedDiff dd = new DetailedDiff(d);
    dd.overrideDifferenceListener(new IgnoreTextAndAttributeValuesDifferenceListener());
    System.out.println(dd);
    assertTrue(dd.similar());

1 个答案:

答案 0 :(得分:0)

ElementQualifier接口决定了XMLUnit相互比较的元素。对于您的具体情况RecursiveElementNameAndTextQualifier可行,但它不是一般解决方案。在更复杂的情况下,您必须在自己的实现中实现匹配策略。