1

2 つの類似した xml 文字列があります。XMLUnit を使用してそれらを比較しますが、いくつかのサンプル テストを実行してそれらを確認したところ、それらは類似しておらず同一ではないことが示されました。それらが同一ではないことに同意しますが、同様の場合は true を返す必要があると思います。以下は、実行した文字列とテスト コードです。

<Errors>
  <Error>
    <Sheet>Sample1</Sheet>
    <ErrorCode>4</ErrorCode>
    <Columns>
      <Column>Id</Column>
      <Column>Name</Column>
    </Columns>
  </Error>
  <Error>
    <Sheet>Sample2</Sheet>
    <ErrorCode>4</ErrorCode>
    <Columns>
      <Column>Id</Column>
      <Column>Name</Column>
    </Columns>
  </Error>
</Errors>

<Errors>
  <Error>
    <Sheet>Sample1</Sheet>
    <ErrorCode>4</ErrorCode>
    <Columns>  
      <Column>Name</Column>
      <Column>Id</Column>
    </Columns>
  </Error>
  <Error>
    <Sheet>Sample2</Sheet>
    <ErrorCode>4</ErrorCode>
    <Columns>
      <Column>Name</Column>
      <Column>Id</Column>
    </Columns>
  </Error>
</Errors>

唯一の違いは、列ノードが逆になっていることですが、両方の文字列が類似していることを返す必要があると思います。

public void test() throws Exception{
    String myControlXML = "here goes xml1";
    String myTestXML = "here goes xml2";
    Diff myDiff = new Diff(myControlXML, myTestXML);

    System.out.println("pieces of XML are similar " +  myDiff.similar());
    System.out.println("but are they identical? " + myDiff.identical());
}
4

1 に答える 1

2

推測ですが、問題は両方のタグが同じ名前であることだと思います。矛盾しているように聞こえますが、次のように説明しましょう。

<root>
    <field>John</field>
    <field>Smith</field>
</root>

<root>
    <field>Smith</field>
    <field>John</field>
</root>

私にとって、これら 2 つの XML は似ていません。1 つはJohn Smithで、もう 1 つはSmith Johnです。

<person>
    <name>John</name>
    <surname>Smith</surname>
<person>
<person>
    <name>John</name>
    <surname>Smith</surname>
<person>

これらの他の人は似ています: 同一ではありませんが、明らかに両方ともJohn Smithと言っています

言い換えれば、@JustinKSUが言うように、順序は重要です。

UPDATE : XMLUnit Java User's Guideから: 2 つの XML は、それらの間に違いがない場合は同一であり、それらの間に回復可能な違いのみがある場合は類似し、それらの間に回復不可能な違いがある場合は異なります。

2 番目の例では、相違点は回復可能であるため、2 つの類似した XML 部分を示しています。最初のものは、正しい順序がわからないからではありません。Smith という名前の人がいるかもしれないので、確信が持てません。あなたの例はかなり同じケースです。パーサーは、列の順序が重要かどうかを知ることができません。SQL クエリの順序を選択するために XML が使用されているとします。

SELECT * FROM table order by name, id明らかに同じではありませんSELECT * FROM table order by id, name

于 2014-03-11T16:18:19.267 に答える