9

私は現在 XMLUnit を使用していますが、比較したいタグの属性のみを無視するように構成する方法があるかどうか疑問に思っています。id

よろしくお願いします。

4

2 に答える 2

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) {
    }
}

ここで必要なことは、属性名が「id」であるかどうかを確認することです。標準の Java DOM 機能が役立ちます。しかし、私は正規表現を使ってこれを行うことを好みます:

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

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

于 2012-07-06T10:28:13.100 に答える
1

このニーズを処理するために、独自のDifferenceListenerを実装しようとしています (この投稿を参照)。すぐに結果を投稿します。うまくいくようで、明日実装を投稿します。

于 2011-03-09T17:03:21.020 に答える