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
是一个谓词函数,它接受单个 DOMNode
并返回true
在比较文档时是否应考虑该节点。默认实现只返回true
所有Node
不是文档类型声明的 s。
您可以使用类似以下(未经测试)的类
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 的用户指南中找到。
推荐阅读
- dart - 使用云功能检测在线状态
- javascript - 查找数组中的值满足条件的数组索引
- pyspark - Pyspark - 在火花数据框中获取值的第一列出现
- r - 在 R 中从头开始创建一个 ggplot() 来说明结果
- python - “没有模块命名...” - 尽管代码似乎可以工作,但编辑器中的错误
- c++ - 如何在 C++ 中使用带有“do while”循环的计数器?
- c++ - 使用固定宽度整数时的 C++98 迂腐错误
- php - 如果优惠券应用于 WooCommerce 中的购物车,则仅显示登录用户的 BACS 支付网关
- r - 一个 R 闪亮的应用程序,显示 ggplot 图和 plotly 图
- c - GCC 无法识别文件内的目录路径