Java xmlunit在相同的xml中看到差异
我第一次使用xmlunit来比较两段xml。它显示出巨大的希望,但在第一个关口就失败了。它正在比较两个几乎相同的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
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'”