XML Diff and Merge - PullRequest
       34

XML Diff and Merge

11 голосов
/ 10 января 2009

Я думаю, что мне нужно решить довольно уникальную проблему. Ну, я не могу найти достаточно информации с помощью Google. Так что вот так,

Я работаю над SOA-приложением Java EE, которое хранит XML-документы как XML с использованием Oracle XML DB. Всякий раз, когда меняется XML, я увеличиваю версию и выбрасываю предыдущую версию в другую таблицу.

Требование заключается в том, что я должен хранить различия между двумя версиями в формате XML вместо всего документа XML.

  1. Существует ли какая-либо библиотека Java, которая может выполнять сравнение XML? (XMLUnit, ...?)
  2. Существует ли стандартная XML-схема для учета различий в XML?
  3. Какую технологию преобразования я могу использовать, чтобы применить «различия» к XML для перехода назад и вперед между версиями? (XSLT, Groovy, ....?)

Я ценю ваше время.

Ответы [ 4 ]

10 голосов
/ 10 января 2009

В моей последней работе у нас была похожая проблема: нам приходилось обнаруживать изменения, вставки и удаления определенных элементов между двумя файлами XML. Файлы не были произвольными XML; они должны были придерживаться нашего XSD.

Наше решение заключалось в реализации своего рода сортировки слиянием: анализ файлов (с использованием SAX-анализатора, а не DOM-анализатора, чтобы разрешить произвольно большие файлы) и сохранение проанализированных данных в отдельных HashMaps. Затем мы сравнили содержимое двух карт, используя алгоритм с сортировкой слиянием.

Естественно, чем больше файлы, тем больше мы испытываем нехватки памяти, поэтому я в конечном итоге написал класс FileHashMap, который помещал пространство значений HashMap в файлы с произвольным доступом. Хотя это теоретически медленнее, это решение позволило нашим сравнениям работать с очень большими файлами, не затрагивая условия OutOfMemoryError. (Версия этого класса FileHashMap доступна в этой библиотеке: http://www.clapper.org/software/java/util/)

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

Удачи.

8 голосов
/ 12 января 2009

Дополнительное примечание: теперь существует стандартный формат для "патчей" с поддержкой XML, в RFC 5261 . Существует как минимум одна бесплатная программа, xmlpatch , которая ее реализует. Он написан на C, вы можете вызвать его с Java.

4 голосов
/ 10 января 2009

Существует любое количество инструментов различий в формате XML с открытым исходным кодом, написанных на Java, которые вы можете использовать. Один список таких инструментов: здесь .

1 голос
/ 10 декабря 2011

Попробуйте использовать Pretty Diff. Он предназначен для работы с несколькими различными расширениями в базовом синтаксисе XML.

http://prettydiff.com/

...