提问人:Rahul Dabas 提问时间:7/19/2013 最后编辑:Rahul Dabas 更新时间:10/7/2015 访问量:3866
XMLUnit 比较 XML 忽略序列
XMLUnit Compare Xml Ignoring Sequence
问:
我需要比较我使用的自定义差异侦听器的 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
我需要匹配元素名称和属性,这与名称和文本匹配。但仍然......现在它正在工作,所以我正在使用它......
如果我找到更好的解决方案,将更新
希望这对:)的人有所帮助
答:
0赞
Stefan Bodewig
2/4/2015
#1
ElementQualifier
是告诉 XMLUnit 要比较哪些元素的原因。如果内置的 s 不适合你,你可以自己提供接口的实现。ElementQualifier
评论