Java xmlunit在相同的xml中看到差异

Java xmlunit在相同的xml中看到差异,java,xml,soap,xmlunit,Java,Xml,Soap,Xmlunit,我第一次使用xmlunit来比较两段xml。它显示出巨大的希望,但在第一个关口就失败了。它正在比较两个几乎相同的xml片段,并声称它们是不同的 Diff diff = new Diff(control, test); diff.overrideDifferenceListener(new IgnoreTextAndAttributeValuesDifferenceListener()); xmlunit返回的结果如下: [different] Expected number of child

我第一次使用xmlunit来比较两段xml。它显示出巨大的希望,但在第一个关口就失败了。它正在比较两个几乎相同的xml片段,并声称它们是不同的

Diff diff = new Diff(control, test);
diff.overrideDifferenceListener(new IgnoreTextAndAttributeValuesDifferenceListener()); 
xmlunit返回的结果如下:

[different] Expected number of child nodes '3' but was '2' - comparing <SOAP-ENV:Envelope...> at /Envelope[1] to <SOAP-ENV:Envelope...> at /Envelope[1]
[不同]预期的子节点数为“3”,但为“2”-将at/Envelope[1]与at/Envelope[1]进行比较
但是xml几乎是一样的。下面是控件:


国标
核心
签名
v10
MSISDN

下面是测试字符串:


国标
核心
签名
v10
巴巴拉


我做错了什么?

您可能需要放宽将节点与XMLUnit进行比较的规则:

XMLUnit.setIgnoreComments(true);
XMLUnit.setIgnoreWhitespace(true);
XMLUnit.setIgnoreDiffBetweenTextAndCDATA(true);
两个XML的
值不相同


第一个是
MSISDN
,第二个是
lblabla

区别在于
SOAP-ENV:Envelope
的子元素数量,其中XMLUnit可以看到两个或三个子元素。我只看到一个“真实”的子元素,所以其余的可能由元素内容空白组成

XMLUnit.setIgnoreWhitespace(true);

在评估差异之前,应该先解决这个问题。

首先,我告诉它忽略内容,其次,即使内容相同,它仍然会失败,并显示相同的消息-这与子节点的数量有关,而不是与内容有关。使用相同的值,它对我有效。我使用
XMLUnit.setNormalizeWhitespace(Boolean.TRUE)
XMLUnit.setIgnoreComments(Boolean.TRUE)
我认为问题出在
IgnoreTextAndAttributeValuesDifferenceListener
上。根据名称,我假设“IgnoreTextAndAttributeValuesDifferenceListener”在比较两个xml文档时应该忽略文本和属性值。要么它的名称不正确,要么它不起作用。
IgnoreTextAndAttributeValuesDifferenceListener
忽略内容。您的区别在于子节点的数量,而不是它们的内容。您看到的额外子节点可能是“元素内容空白”的文本节点,当您设置
setIgnoreWhitespace(true)
时,该节点应消失。设置属性后,将示例粘贴到一个简单测试中,我看不出有什么不同。应用这些更改后,结果是相同的。“预期子节点数为'3',但为'2'”