java - 忽略 xmlunit 中的空标签

标签 java xmlunit

有没有办法完全忽略 XMLUnit 中的空标签,以便在比较时不考虑它? 例如:

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

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

不应返回任何差异。 是否有任何内置函数可以执行此操作? 谢谢。

最佳答案

一般来说,空标签与缺失标签不同,这就是 XMLUnit 提示的原因。在 XMLUnit 2.x 中,您可以使用 NodeFilter 抑制节点的比较。 NodeFilter 是一个谓词函数,它接受单个 DOM Node 并在比较文档时应考虑该节点时返回 true。默认实现只是为所有不是文档类型声明的 Node 返回 true

您可以使用类似以下(未经测试)的类

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

关于java - 忽略 xmlunit 中的空标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50903514/

相关文章:

用于数据库支持集合的 Java 库

java - 嵌入浏览器(safari、firefox、chrome)+ Java 中的访问 DOM

java - 如何从 HackerEarth 优化这个练习?

java - 将 xmlUnit 中的元素与空元素进行比较时发现意外差异

java - Spark-Java静态文件位置问题

java - 如何解决 "Use the original value instead."SonarQube问题?

java - 使用具有变量值的 XMLUnit 测试 XML

java - 将类似的 xml 文件与带有无序标签的 XmlUnit 进行比较(具有不同属性的相同标签名称)

java - 如何比较 2 个 XML 文件以及如何使用 XMLUnit 获取新添加\删除元素等信息

java - XMLUNIT 忽略 xmlns?