2016-01-02 2 views
0

У меня есть два 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. Пожалуйста, помогите мне в решении этой проблемы. Заранее спасибо

+0

Я не могу воспроизвести те же результаты с помощью тех же самых XML и тестеров. Для меня он возвращает только 'control:/Students [1]/Email [2]'. Я пробовал xmlunit-1.3 и xmlunit-1.5. Проверьте входные файлы, которые вы читаете. –

ответ

0

Возможно, у вас есть некоторые пробелы (пробелы, символы перевода и т. Д.) Слишком много в одном из ваших файлов. Чтобы игнорировать пробелы, добавьте эту строку в начале вашего тестера:

XMLUnit.setIgnoreWhitespace(true); 
Смежные вопросы