我有以下testXML
<root>
<a>test</a>
<b>bee</b>
<d/>
</root>
虽然templateXML看起来像这样
<root>
<a/>
<b/>
<c/>
<d>
<e/>
</d>
</root>
我希望XMLUnit返回缺少的元素,在这种情况下'c'和'e'缺失
/ root [1] / c [1]丢失了 / root [1] / d [1] / e [1]缺失
我的代码看起来像这样
public static ArrayList<Difference> testCompareToSkeletonXML(String xml, String template) throws Exception {
XMLUnit.setCompareUnmatched(false);
XMLUnit.setIgnoreAttributeOrder(true);
XMLUnit.setIgnoreComments(true);
XMLUnit.setIgnoreWhitespace(true);
XMLUnit.setIgnoreDiffBetweenTextAndCDATA(true);
DifferenceListener myDifferenceListener = new IgnoreTextAndAttributeValuesDifferenceListener();
DetailedDiff myDiff = new DetailedDiff(new Diff(template, xml));
// myDiff.overrideDifferenceListener(myDifferenceListener);
myDiff.overrideElementQualifier(new RecursiveElementNameAndTextQualifier());
ArrayList<Difference> returnList = new ArrayList<Difference>();
List<Object> allDifferences = myDiff.getAllDifferences();
for(Object obj: allDifferences){
Difference dif = (Difference) obj;
if(dif.getTestNodeDetail().getNode()== null){
//returnList.add(dif);
System.out.println(dif.getControlNodeDetail().getXpathLocation());
}
}
return returnList;
}
生成的输出如下所示
/ root [1] / a [1]
/ root [1] / b [1]
/ root [1] / c [1]
/ root [1] / d [1]
感谢您的帮助 --SD
答案 0 :(得分:2)
如果元素名称和嵌套文本相同,则告诉XMLUnit仅匹配元素。对于您的a
或b
元素(它们在嵌套文本中有所不同),情况并非如此,这就是您在列表中看到它们的原因。
根据d
的规则,您看到e
而不是嵌套d
,因为顶级RecursiveElementNameAndTextQualifier
不同。如果您删除了行设置,则RecursiveElementNameAndTextQualifier
列表会缩小为
/root[1]/c[1]
/root[1]/d[1]/e[1]
这是你所期待的。