XMLUnit - 比较时忽略'id'属性

ree*_*eef 9 java xml xmlunit

我目前正在使用XMLUnit,我想知道是否有办法将其配置为忽略id我想要比较的标签的属性.

在此先感谢您的帮助.

sha*_*piy 8

解决方案非常简单.您可以配置DifferenceEngine处理ATTR_VALUE差异.编写实现DifferenceListener的自定义差异侦听器类:

class IgnoreIDsDifferenceListener implements DifferenceListener {
    private static final int[] IGNORE_VALUES = new int[] {
            DifferenceConstants.ATTR_VALUE.getId(),
    };

    private boolean isIgnoredDifference(Difference difference) {
        int differenceId = difference.getId();
        for (int i=0; i < IGNORE_VALUES.length; ++i) {
            if (differenceId == IGNORE_VALUES[i]) {
                return true;
            }
        }
        return false;
    }

    public int differenceFound(Difference difference) {
        if (isIgnoredDifference(difference)) {
            return RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL;
        } else {
            return RETURN_ACCEPT_DIFFERENCE;
        }
    }

    public void skippedComparison(Node control, Node test) {
    }
}
Run Code Online (Sandbox Code Playgroud)

这里要求的是检查属性名称是否为"id".标准Java DOM功能可以提供帮助.但我更喜欢通过正则表达式来做到这一点:

String controlNode = difference.getControlNodeDetail().getNode().toString();
controlNode .matches("^id=\".*\"")
Run Code Online (Sandbox Code Playgroud)

PS参见:http://xmlunit.sourceforge.net/api/org/custommonkey/xmlunit/Difference.html


ree*_*eef 1

我将尝试实现我自己的DifferenceListener来处理这种需求(请参阅这篇文章)。很快就会发布结果。看来可行,明天发布实施。