3

比较这两个 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]

我的问题是,为什么 typeDifferenceConstants.HAS_CHILD_NODES_ID和 not有区别DifferenceConstants.TEXT_VALUE_ID?两个 XML 片段的结构相同,但两者的文本值不同。

那么,为什么这不会引发差异呢?

4

1 回答 1

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更深入。

于 2012-10-12T13:54:18.920 回答