2016-08-11 8 views
0

私はxmlunit 2.2.1をJavaで使用しており、一致する以下のXMLを持っています。ここでの問題は2つあり:順序ではない異なる順序番号形式のネストされた要素を一致させる

  1. 同じ数値の一部は、後続ゼロそれので動作しません。この理由ByNameAndTextRecSelector()(例えば0.250000

を有することができる

  • すべてのテキストノードが完全に一致する必要がありますが、ここではそうではありません。私は既にDifferenceEvaluatorを実装しており、数字の末尾のゼロを処理します。しかし、私は比較する正しい要素を選択するために何を使用しますか?

    XML 1:

    <test> 
        <table> 
        <row> 
         <element> 
         <code>ALPHA</code> 
         <scale>0.25</scale> 
         </element> 
        </row> 
        <row> 
         <element> 
         <code>DELTA</code> 
         <scale>0.1</scale> 
         </element> 
        </row> 
        </table> 
    </test> 
    

    XML 2:

    <test> 
        <table> 
        <row> 
         <element> 
         <code>DELTA</code> 
         <scale>0.1</scale> 
         </element> 
        </row> 
        <row> 
         <element> 
         <code>ALPHA</code> 
         <scale>0.2500000</scale> 
         </element> 
        </row> 
        </table> 
    </test> 
    
  • 答えて

    1

    は正しいノードを選択するのに十分なcode要素ですか?その場合は、ユーザガイドの例https://github.com/xmlunit/user-guide/wiki/SelectingNodes#conditional-elementselectorsのようなアプローチが有効です。

    ElementSelectors.conditionalBuilder() 
        .whenElementIsNamed("row").thenUse(ElementSelectors.byXPath("./element/code", ElementSelectors.byNameAndText)) 
        .elseUse(ElementSelectors.byName) 
        .build(); 
    

    これは、異なる数値書式に対しては役立ちません。それらを処理するには、DifferenceEvaluatorを無効にして、数字を保持するノードをTextで検出し、それらを解析して、相違点を十分に近い場合はEQUALとマークする必要があります。

    codeが十分でない場合、その後、あなたは、私は上記のようにDifferenceEvaluator数字の世話をするElementSelectorを書いて、上記条件の内側ElementSelectors.byNameAndTextとそれを結合する必要があります。

    +0

    'code'で十分ではないので、私は' scale'も必要になります。どのように私は2つを組み合わせるのですか?私は 'と'を使って、 'thenUse'の中に入れますか? – Roland

    +0

    これはうまくいきました: 'と(byXPath(" ./ element/code "、byNameAndText)、byXPath(" ./ element/scale "、new SelectorByNameAndNumber()))' – Roland

    +1

    'それらを別々に保つこともできます。それがうれしかった。 –

    関連する問題