忽略xmlunit中的空标签

时间:2018-06-18 06:10:40

标签: java xmlunit

有没有办法完全忽略XMLUnit中的空标记,以便不将其用于比较? 例如:

<a>
<b/>
<c>data1</c>
<d>data2</d>
</a>

<a>
<c>data1</c>
<d>data2</d>
</a>

不应该有任何不同。 这样做是否有任何内置功能? 谢谢。

1 个答案:

答案 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中找到。