2

XMLunit を使用して、次の XML を比較しています

XML 1

<element1>
</element1>
<element2>   Some Text  </element2>

XML2

<element1/>
<element2>Some Text</element2>

要素2のみが異なると予想していますが、要素1ではこのような違いが得られます

「子ノードの存在は true であると予想されていましたが、false でした」.
"子ノード 1 の数が期待されていましたが、0 でした"
"子ノード '#text' の存在が期待されていましたが、null でした。

これで解決できることはわかっていますがsetIgnoreWhiteSpaceelement2空白の違いが必要です。

4

2 に答える 2

2

<element1/>同じを<element1></element1>返す必要がありますが、newlineタグの間に a があるため、これは 1 文字または 2 文字のテキスト ノードです (改行が であるCR LFか、単にであるかによって異なりますLF)。

パーサーに空白を無視するように指示しなかったため、ソースデータで見つかったすべてのものを提供します。それをどうするかはあなた次第です。

于 2015-09-06T08:28:03.893 に答える
-1

他の人が述べたように、XMLUnit は内部のテキスト (改行で構成される) を<element1>子ノードとして扱います。<element1他の XMLの> には子ノードがありませ(空のテキストもありません)。

そのような違いを無視したい場合は、 custom を書く必要がありますDifferenceListener:

Diff diff = new Diff(doc1, doc2);
diff.overrideDifferenceListener(new DifferenceListener() {

    ...

    @Override
    public int differenceFound(Difference difference) {
        if(difference.getId() == DifferenceConstants.HAS_CHILD_NODES_ID) {
            Node controlNode = difference.getControlNodeDetail().getNode();
            Node testNode = difference.getTestNodeDetail().getNode();

            if(controlNode.getChildNodes().getLength() == 0) {
                Node childNode = testNode.getChildNodes().item(0);
                // note the trim method call
                if(childNode.getNodeType() == Node.TEXT_NODE
                          && childNode.getTextContent().trim().isEmpty()) {
                    return DifferenceListener.RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL;
                }
            } else { // we're sure the other node has children in the else part
                Node childNode = controlNode.getChildNodes().item(0);
                if(childNode.getNodeType() == Node.TEXT_NODE
                          && childNode.getTextContent().trim().isEmpty()) {
                    return DifferenceListener.RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL;
                }
            }
        }
        return DifferenceListener.RETURN_ACCEPT_DIFFERENCE;
    }
});
于 2015-09-06T09:05:45.390 に答える