9

私は2つのxmlファイルを持っています:

問題は属性の接頭辞にあります。

<element xmlns:prefix1="namespace" prefix1:attribute="some value">Some text</element>


<element xmlns:prefix2="namespace" prefix2:attribute="some value">Some text</element>

これら 2 つの xml は同じで、名前空間は同じですが、接頭辞が異なります。xmlunit と比較すると -> アサーションが失敗します。どうすれば対処できますか?

similar() または同一() 比較の場合、エラーが発生します:

属性名 'message:MessageNameString' が予期されましたが、'null' でした
属性名 'message:MessageVersion' が予期されましたが、'null' でした
属性名が予期されましたが、'null' でしたが、'mes:MessageNameString'
でしたメッセージバージョン'

4

3 に答える 3

6

次のテストは、「類似」チェックには合格しますが、「同一」チェックには失敗します。

    String control = "<prefix1:element xmlns:prefix1=\"namespace\" prefix1:attribute=\"x\">Some text</prefix1:element>";
    String test = "<prefix2:element xmlns:prefix2=\"namespace\" prefix2:attribute=\"x\">Some text</prefix2:element>";
    try
    {
        Diff diff = XMLUnit.compareXML( control, test );
        assertTrue( "Similar", diff.similar() );
        assertTrue( "Identical", diff.identical() );
    }
    catch ( Exception e )
    {
        fail( e.getMessage() );
    }

xmlunit API ドキュメントから:

  • 同一: ドキュメント内のノードの内容と順序がまったく同じです
  • 類似: ドキュメント内のノードの内容は同じですが、兄弟要素の順序付け、名前空間プレフィックスの値、暗黙の属性値の使用など、わずかな違いがあります。

したがって、「類似」チェックを使用すると、必要なものが得られます。

編集:接頭辞付き属性を追加、同じ結果。

于 2012-11-13T10:08:17.373 に答える
0

XMLUnit 1.x の場合:

// Similar
XMLAssert.assertXMLEqual()

// Identical
XMLAssert.assertXMLIdentical()

XMLUnit 2.x の場合:

import static org.xmlunit.assertj.XmlAssert.assertThat;
...

// Similar
assertThat(xmlResult).and(xmlExpected).areSimilar();

// Identical
assertThat(xmlResult).and(xmlExpected).areIdentical();

https://github.com/xmlunit/xmlunit#comparing-two-documentsを参照してください

于 2018-09-24T22:05:21.670 に答える
0
// identical
XMLAssert.assertXMLEqual(XMLUnit.compareXML(control, test), true)
// similar
XMLAssert.assertXMLEqual(XMLUnit.compareXML(control, test), false)
于 2017-06-29T17:15:57.297 に答える