Почему эти две строки 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