Подтвердить что ты не робот

XML Diff и Merge

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Удачи.

Ответ 2

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

Ответ 3

Существует множество инструментов XML diff с открытым исходным кодом, написанных на Java, из которых вы можете вырезать. Один из таких инструментов - здесь.

Ответ 4

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

http://prettydiff.com/