有没有办法完全忽略XMLUnit中的空标记,以便不将其用于比较? 例如:
<a>
<b/>
<c>data1</c>
<d>data2</d>
</a>
和
<a>
<c>data1</c>
<d>data2</d>
</a>
不应该有任何不同。 这样做是否有任何内置功能? 谢谢。
答案 0 :(得分:1)
通常,空标记与缺失标记不同,这就是XMLUnit抱怨的原因。在XMLUnit 2.x中,您可以使用NodeFilter
来抑制节点的比较。 NodeFilter
是一个谓词函数,如果在比较文档时应考虑节点,则接受单个DOM Node
并返回true
。对于不是文档类型声明的所有true
,默认实现只返回Node
。
您可以使用类似以下(未经测试的)类
class SuppressEmptyElements implements Predicate<Node> {
@Override
public boolean test(Node n) {
if (n instanceof Element) {
return !isEmpty((Element) n);
}
// not an element - a commment, nested text and so on
return true;
}
private boolean isEmpty(Element e) {
return e.getAttributes().getLength() == 0 && e.getChildNodes().getLength() == 0;
}
}
使用DiffBuilder
时,您会使用withNodeFilter(new SuppressEmptyElements())
之类的内容。较长的故事可以在XMLUnit的user guide中找到。