Как сравнить 10 больших файлов XML? - PullRequest
1 голос
/ 27 января 2011

У меня есть 10 больших файлов XML, и некоторые файлы отличаются от других (это представляет данные на этапе процесса).

Как их сравнить АВТОМАТИЧЕСКИ ?

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

Я бы хотел сделать это на компьютере с Windows, но у меня установлен Cygwin .

Я думаю, что могу как-то использовать git diff , чтобы сделать это, но ... как?

Ответы [ 4 ]

2 голосов
/ 27 января 2011

Вам нужно сравнение с поддержкой XML, например, такое, которое распознает, что порядок атрибутов не имеет значения?Если это так, вы можете сравнить файлы, проанализировав их и используя функцию deep-equal () в XPath или XQuery.Кроме того, вы можете преобразовать файлы в каноническую форму XML, а затем сравнить байонизированные файлы в байтовом порядке.

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

2 голосов
/ 27 января 2011

Если все, что вы хотите знать, это разница, то самое простое (не самое быстрое!) Будет сделать хеш над ними и сравнить результаты. md5sum yourfile * .xml и посмотрите, какие записи идентичны.

Было бы более эффективно сравнивать их по-другому, но я не думаю, что есть стандартные инструменты для этого - однако, небольшая программа подойдет.

Open all files to be compared
Loop over the character indices
    fetch character from each, compare
    remove from list those which are not identical / group those who have the same 

Итак, по первому отличию вы можете сузить область поиска в зависимости от того, что вы хотите сделать. Вычисление контрольной суммы / хэша будет делать это для всех файлов по умолчанию; Вы написали о больших файлах.

Пока что я бы пошел с md5sum (shasum, ...).

1 голос
/ 27 января 2011

Что ж, самый простой способ сравнить два файла - использовать diff file1 file2.Вы можете добавить опции -b и -B, чтобы игнорировать различия между пробелами и белыми линиями: diff -bB file1 file2.try man diff.

Если вы хотите сделать это для большого количества файлов, используйте скрипт.

git diff имеет значение, если вы сравниваете две ревизии одного и того же файла.*

my2c

1 голос
/ 27 января 2011

Если вы просто хотите быстро определить, являются ли файлы одинаковыми или нет, вы можете подумать об использовании алгоритма хеширования - md5 для каждого файла и сравнить полученные хеши?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...