在xmlUnit中使用空元素比较元素时发现意外的差异

时间:2012-10-12 13:32:52

标签: java xmlunit

比较这两个XML片段:

testXml:
<ELEMENT1>
    <CHILD1></CHILD1>
</ELEMENT1>

actualXml:
<ELEMENT1>
    <CHILD1>notEmpty</CHILD1>
</ELEMENT1>

使用:

Diff diff = new Diff(testXml, actualXml);
Detailed detailedDiff = new DetailedDiff(diff);

现在detailedDiff.getAllDifferences();将返回DifferenceConstants.HAS_CHILD_NODES_ID差异,如果您将差异打印到控制台,它看起来像这样:

Expected presence of child nodes to be 'false' but was 'true' - comparing <CHILD1...> at /ELEMENT1[1]/CHILD1[1] to <CHILD1...> at /ELEMENT1[1]/CHILD1[1]

我的问题是,为什么DifferenceConstants.HAS_CHILD_NODES_ID类型与DifferenceConstants.TEXT_VALUE_ID类型不同?两个XML片段的结构是相同的,但两者的文本值不同。

那么,为什么不能引发差异?

1 个答案:

答案 0 :(得分:2)

尝试使用此ElementQualifier

Diff diff = new Diff(testXml, actualXml);
diff.overrideElementQualifier(new RecursiveElementNameAndTextQualifier() );
Detailed detailedDiff = new DetailedDiff(diff);

这是javadoc的描述:

public RecursiveElementNameAndTextQualifier()
     

使用元素名称和嵌套任意级别的子文本   更深入元素的元素来比较元素。检查所有   节点,而不仅仅是第一个子元素。   不会忽略空文本节点。

这里感兴趣的是“不忽略空文本节点”。

似乎默认ElementQualifier将空节点视为缺失节点,并且仅检查与一个节点相关的第一个错误。所以在你的情况下,可能只抛出“HAS_CHILD_NODES_ID”,而不是也包括“TEXT_VALUE_ID”。

至少,RecursiveElementNameAndTextQualifier更深入。