2013-03-06 2 views
0

Я хочу убедиться, что 2 файла XML одинаковы, и 2 варианта, которые я вижу. 1. Получите XML, чтобы иметь дату последнего изменения со временем, и убедитесь, что это то же самое. Проблема в том, что кто-то может забыть ее изменить, а затем бесполезно. 2. Создайте хэш-код файла/структуры xml.Как проверить изменения в XML-файле?

Я использую сборки в библиотеке в Java, но реализация хэша может меняться от запуска к запуску, который не является полезным

File model = new File(fileLocation); 
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
Document doc = dBuilder.parse(model); 
doc.getHash(); 

есть простой способ сделать это, и, надеюсь, не импортируя другую библиотеку.

+3

Я могу прочитать разные вопросы из этого: Eith вы хотите проверить, отличается ли * содержимое * файла * (тогда просто хэш-файл), или вы хотите проверить, изменилась ли фактическая структура XML (так что замена порядка к элементам не может привести к разнице). Который из них? –

+2

В моем приложении, которое использует «хеширование XML», я использую хэш (используя поток) по DOM в определенном порядке, то есть я сортирую элементы по алфавиту и спускаюсь по глубине, и для каждого элемента я сортирую значения по алфавиту. Это работает для меня (TM). – 2013-03-06 08:48:15

+0

Я думаю, что первый выбор, если оба файла идентичны. Во-вторых, было бы здорово, но я думаю, что это слишком сложно и в моем случае не нужно. – Juan

ответ

1

Как Мартин Thurau отметил, это зависит, хотите ли вы, чтобы проверить, если файлы идентичны, или если содержание XML является идентичным. Этот ответ предназначен только для первого случая, когда вы хотите узнать, идентичны ли два файла, я думаю, это был ваш вопрос, потому что вы предложили хеш-значение.

В этом случае здание хэш не является хорошим выбором, вы можете решить эту проблему проще так:

  1. Проверьте те же размеры файлов, если не они не идентичны.
  2. Открыть поток обоих файлов.
  3. Просто пройдите через потоки и остановитесь на первое различие.
  4. Если различия не обнаружены, они идентичны.

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

2

Будет сортировка файла и сравнение справки? В случае библиотек diffxml.

XMLUnit имеет diff особенности

Смежные вопросы