Я использую 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>
Что я делаю не так?
Разница заключается в количестве детей SOAP-ENV:Envelope
котором XMLUnit видит двух или трех детей. Я вижу только одного "реального" ребенка, поэтому остальные, вероятно, состоят из простейшего содержимого элемента.
XMLUnit.setIgnoreWhitespace(true);
перед оценкой разницы следует исправить это.
Значение <v:accountId></v:accountId>
не совпадает для двух xmls.
Первый - это <v:accountId>MSISDN</v:accountId>
а второй - <v:accountId>lblabla</v:accountId>
Возможно, вам придется отключить правила для сравнения узлов с XMLUnit:
XMLUnit.setIgnoreComments(true);
XMLUnit.setIgnoreWhitespace(true);
XMLUnit.setIgnoreDiffBetweenTextAndCDATA(true);
XMLUnit.setNormalizeWhitespace(Boolean.TRUE);
иXMLUnit.setIgnoreComments(Boolean.TRUE);