6

Мне нужно сравнить два XML-файла, каждый из которых имеет длину около 13 000 строк.

К сожалению, код, который генерирует эти файлы, не генерирует данные в одном и том же порядке каждый раз (данные поступают из базы данных).

Поэтому я получаю ложные срабатывания при использовании стандартной построчной утилиты сравнения (WinMerge), даже после канонизации файла XML.

В качестве примера моей проблемы:

file1:

<a>
  <b key="fruit.preferred">banana</b>
  <b key="fruit.available">pineapple</b>
  <b key="fruit.available">apple</b>
  <b key="fruit.available">orange</b>
</a>

file2:

<a>
  <b key="fruit.available">pineapple</b>
  <b key="fruit.preferred">banana</b>
  <b key="fruit.available">apple</b>
  <b key="fruit.available">orange</b>
</a>

Эти файлы имеют одинаковое содержимое, но положение банановой линии означает, что они считаются разными по традиционным различиям. Существуют ли какие-либо инструменты, которые могут выполнять сортировку таким образом, чтобы файлы считались одинаковыми?

Кстати, файловые структуры XML сложнее, чем в приведенных выше примерах!

1 ответ1

0

Я думаю, что вы можете использовать такой инструмент, как xmldiff для этих целей.

http://diffxml.sourceforge.net/

На веб-странице инструментов это заявляет:

Стандартные инструменты Unix diff и patch используются, чтобы найти различия между текстовыми файлами и применить различия. Эти инструменты работают построчно, используя хорошо изученные методы для вычисления самой длинной общей подпоследовательности (LCS).

Использование этих инструментов для иерархически структурированных данных (XML и т.д.) Приводит к неоптимальным результатам, поскольку они не способны распознать древовидную структуру этих файлов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .