4

子ノード シーケンスと属性リスト シーケンスを無視するカスタム差分リスナーを使用している 2 つの XML を比較する必要があります。

if (difference.getId() == DifferenceConstants.CHILD_NODELIST_SEQUENCE_ID ||
    difference.getId() == DifferenceConstants.ATTR_SEQUENCE_ID) 
return DifferenceListener.RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL; 

私のコードは次の場合にうまく機能します:

    <xml>
        <elem1 att1="abc" att2="def"></elem1>
        <elem1></elem1>
    </xml>

    <xml>
        <elem1></elem1>
        <elem1 att2="def" att1="abc"></elem1>
    </xml>

ただし、これらの XML も同一であると見なす必要があります。

<xml>
    <elem1>
      <elem2>
         <id>ABC</id>
         .....
      </elem2>
    </elem1>
    <elem1>
      <elem2>
         <id>DEF</id>
         .....
      </elem2>
    </elem1>
</xml>

<xml>
    <elem1>
      <elem2>
         <id>DEF</id>
         .....
      </elem2>
    </elem1>
    <elem1>
      <elem2>
         <id>ABC</id>
         .....
      </elem2>
    </elem1>
</xml>

ここでは、シーケンスのみが混同されているため、両方の XML の両方の elem1 が同一であると見なして比較したいと考えています。したがって、コードが複数のネスト レベルで機能する必要があります。XMLUnitでそれは可能ですか? 誰か助けてください?

一時的な解決策を見つけました (自分の質問に 8 時間コメントを追加できません):

私は以前 ElementQualifier を次のようにオーバーライドしていました:

xmlDiff.overrideElementQualifier(new RecursiveElementNameAndTextQualifier());

より深いレベルの XML 比較に multiLevelElementNameandTextQualifier を使用することもできます。再帰はレベル 1 のみです。

詳細については、http: //xmlunit.sourceforge.net/userguide/html/ar01s03.html#ElementQualifierの例 20を参照してください。

要素名と属性を一致させる必要があり、これは名前とテキストと一致します..しかし、それでも..今のところ動作しているので、使用しています..

より良い解決策が見つかったら更新します

これが誰かに役立つことを願っています:)

4

1 に答える 1

0

ElementQualifier比較する要素を XMLUnit に指示するものです。組み込みElementQualifierの が機能しない場合は、自分でインターフェイスの実装を提供できます。

于 2015-02-03T16:39:58.903 に答える