У меня есть два xmls, которые нужно сравнить. Количество элементов в обоих xml может отличаться. Скажем, например, рассмотрим ниже двух XMLs:Сравнение двух XML с различным количеством элементов с использованием XMLUnit
XML1:
<Students>
<Name Type="PG">
<GivenName>David</GivenName>
<Surname>John</Surname>
</Name>
<Name Type="PG">
<GivenName>Naveen</GivenName>
<Surname>S</Surname>
</Name>
<Telephone AreaCityCode="BLR">
<PhoneNumber No="+91-9643542222"/>
</Telephone>
<Telephone AreaCityCode="BLR">
<PhoneNumber No="+91-9643542258"/>
</Telephone>
<Email>[email protected]</Email>
<Email>[email protected]</Email>
<Address Type="PT">
<AddressLine>40 DICKENSON ROAD</AddressLine>
<AddressLine>BANGALORE 12</AddressLine>
</Address>
<Address Type="TP">
<AddressLine>DOUBLE ROAD</AddressLine>
<AddressLine>BANGALORE 20</AddressLine>
</Address>
</Students>
xml2:
<Students>
<Name Type="PG">
<GivenName>David</GivenName>
<Surname>John</Surname>
</Name>
<Name Type="PG">
<GivenName>Naveen</GivenName>
<Surname>S</Surname>
</Name>
<Telephone AreaCityCode="BLR">
<PhoneNumber No="+91-9643542222"/>
</Telephone>
<Telephone AreaCityCode="BLR">
<PhoneNumber No="+91-9643542258"/>
</Telephone>
<Email>[email protected]</Email>
<Address Type="PT">
<AddressLine>40 DICKENSON ROAD</AddressLine>
<AddressLine>BANGALORE 12</AddressLine>
</Address>
<Address Type="TP">
<AddressLine>DOUBLE ROAD</AddressLine>
<AddressLine>BANGALORE 30</AddressLine>
</Address>
</Students>
В xml2, количество email
элемента только один, но там, где, как и в XML1 это два. Моя задача - сравнить содержимое элемента AddressLine
, независимо от количества email
элементов. Я написал кусок кода для получения этого, как показано ниже:
XMLUnit.setIgnoreWhitespace(true);
XMLUnit.setIgnoreAttributeOrder(true);
XMLUnit.setIgnoreComments(true);
XMLUnit.setIgnoreDiffBetweenTextAndCDATA(true);
DetailedDiff detailledDiff = new DetailedDiff (XMLUnit.compareXML(XML1, XML2));
detailledDiff.overrideElementQualifier(new ElementNameAndTextQualifier());
List<Difference> list = detailledDiff.getAllDifferences();
for (Difference difference : list) {
if(difference.getTestNodeDetail().getXpathLocation() == null)
System.out.println("control: "+difference.getControlNodeDetail().getXpathLocation());
if(difference.getControlNodeDetail().getXpathLocation() == null)
System.out.println("test: "+difference.getTestNodeDetail().getXpathLocation());
}
Даже если есть изменения в AddressLine
, он не печатает addressLine
XPath. Пожалуйста, помогите мне в решении этой проблемы. Заранее спасибо
Я не могу воспроизвести те же результаты с помощью тех же самых XML и тестеров. Для меня он возвращает только 'control:/Students [1]/Email [2]'. Я пробовал xmlunit-1.3 и xmlunit-1.5. Проверьте входные файлы, которые вы читаете. –