【问题标题】:XMLUnit - Ignoring 'id' attribute in comparisonXMLUnit - 比较忽略“id”属性
【发布时间】:2011-03-09 16:40:49
【问题描述】:

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

提前感谢您的帮助。

【问题讨论】:

标签: java xml xmlunit


【解决方案1】:

解决方案非常简单。您可以配置您的 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) {
    }
}

这里需要检查属性名称是否为“id”。标准 Java DOM 功能可能会有所帮助。但我更喜欢通过正则表达式来做到这一点:

String controlNode = difference.getControlNodeDetail().getNode().toString();
controlNode .matches("^id=\".*\"")

附:另见:http://xmlunit.sourceforge.net/api/org/custommonkey/xmlunit/Difference.html

【讨论】:

    【解决方案2】:

    我将尝试实现我自己的DifferenceListener 来满足这一需求(请参阅this post)。很快就会公布结果。它似乎工作,明天将发布实现。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    相关资源
    最近更新 更多