Почему эти две строки XML не похожи

У меня есть две похожие строки 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());
}

1 ответ

Просто догадываюсь, но я думаю, что проблема в том, что оба тега имеют одинаковое имя. Это звучит противоречиво, но позвольте мне объяснить это:

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

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

Для меня эти два фрагмента XML не похожи друг на друга: один говорит Джон Смит, а другой - Смит Джон

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

Эти другие похожи: не идентичны, но четко оба говорят, что Джон Смит

Другими словами: как говорит @JustinKSU, порядок имеет значение.

ОБНОВЛЕНИЕ: Из Руководства пользователя XMLUnit Java:два фрагмента XML идентичны, если между ними нет различий, аналогичны, если между ними имеются только восстанавливаемые различия, и различны, если между ними есть неустранимые различия

Мой второй пример показывает две одинаковые части XML, потому что различия восстанавливаются. Первый не потому, что мы не знаем правильный порядок: может быть, есть парень по имени Смит, поэтому мы не можем быть уверены. Ваш пример в точности такой же: парсер не может знать, важен порядок столбцов или нет. Представьте, что ваш XML используется для выбора порядка заказа SQL-запроса:

SELECT * FROM table order by name, id явно не то же самое, что SELECT * FROM table order by id, name

Другие вопросы по тегам