1

我第一次使用 xmlunit 来比较 2 条 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]

但是xml几乎是一样的。这是控制:

<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2001/12/soap-envelope"> <SOAP-ENV:Body> <v:messagegroup xmlns:v="http://www.outfit.net/chargingandpayments/message/1.0"> <v:request> <v:msgcontrol> <v:country>GB</v:country> <v:caller> <v:name>CORE</v:name> <v:signature>Signature</v:signature> <v:version>v10</v:version> </v:caller> <v:headers/> </v:msgcontrol> <v:validate> <v:accountId>MSISDN</v:accountId> </v:validate> </v:request> </v:messagegroup> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

这是测试字符串:

<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2001/12/soap-envelope"> <SOAP-ENV:Body> <v:messagegroup xmlns:v="http://www.outfit.net/chargingandpayments/message/1.0"> <v:request> <v:msgcontrol> <v:country>GB</v:country> <v:caller> <v:name>CORE</v:name> <v:signature>Signature</v:signature> <v:version>v10</v:version> </v:caller> <v:headers /> </v:msgcontrol> <v:validate> <v:accountId>lblabla</v:accountId> </v:validate> </v:request> </v:messagegroup> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

我究竟做错了什么?

4

3 回答 3

1

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

XMLUnit.setIgnoreWhitespace(true);

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

于 2015-02-03T19:58:55.913 回答
0

两个 xml的值 <v:accountId></v:accountId>一样

第一个是 <v:accountId>MSISDN</v:accountId>,第二个是<v:accountId>lblabla</v:accountId>

于 2014-04-30T12:34:40.783 回答
0

您可能需要放宽使用 XMLUnit 比较节点的规则:

XMLUnit.setIgnoreComments(true);
XMLUnit.setIgnoreWhitespace(true);
XMLUnit.setIgnoreDiffBetweenTextAndCDATA(true);
于 2014-04-30T12:10:54.170 回答