我有两个xml,需要比较。两个 xml 中的元素数量可能会有所不同。例如,考虑以下两个 xml:
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>David.JOHN@gmail.com</Email>
<Email>Naveen.S@gmail.com</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>David.JOHN@gmail.com</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。请帮我解决这个问题。提前致谢