Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / сравнение двух xml / 10 сообщений из 10, страница 1 из 1
07.08.2016, 23:25
    #39288009
sanringo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение двух xml
Даны два xml-файла: старый и новый. Оба содержат данные о товарах с элементами <product>. Задача вывести продукты, которые изменились, новые и исчезнувшие. Требования: быстрота обработки, минимум занимаемой памяти при обработке.
Пока на ум приходит задействовать SAX парсер. Считать из нового файла первый объект, пробежаться по старому файлу. Если нашли, то сравниваем, иначе в результат с пометкой "новый". Если не равны заносим в результат с пометкой "изменён".
Может есть вариант по-проще и спец библиотеки?
...
Рейтинг: 0 / 0
08.08.2016, 00:10
    #39288019
nb_brain
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение двух xml
sanringo Считать из нового файла первый объект, пробежаться по старому файлу. Если нашли, то сравниваем, иначе в результат с пометкой "новый".
Потом считать второй объект и снова пробежаться по старому файлу? Имхо это не самый эффективный способ. O(n^2)

На вскидку я бы предложил вариант тем же SAX или StAX прочитать все продукты из первого файла и поскладывать их в хэшмап (их уникальное представление в качестве key), потом продукты из второго файла и в тот же хэшмап. В качестве value объект с данными которые нужно проверить на изменение и статус ("есть только в первом файле", "есть только во втором", "есть и там и там данные не поменялись", "есть и там и там данные поменялись"). Ну или типа того. Так должно получиться O(n).

Правда не знаю насколько подобное подойдет вам по памяти, но должно быть быстрее чем полный проход второго файла для каждого элемента из первого.
...
Рейтинг: 0 / 0
08.08.2016, 03:36
    #39288025
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение двух xml
...
Рейтинг: 0 / 0
08.08.2016, 06:36
    #39288032
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение двух xml
Usman,

XMLUnit + assertXMLEquals(xml1, xml2)

+1

С уважением, Валентин
...
Рейтинг: 0 / 0
08.08.2016, 10:28
    #39288124
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение двух xml
можно через xslt преобразование получить фактически выжимку из новых или исчезнувших.
есть плюсы есть минусы у подхода.
...
Рейтинг: 0 / 0
08.08.2016, 11:54
    #39288191
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение двух xml
llemingесть плюсы есть минусы у подхода.
+1
Вообще, XML это транспорт из точки А в точку Б.
Анализировать надо в информационной системе.
Было бы странно, если бы вы в тачке строителей по пути начали песок анализировать.
Есть вариант загнать в ИС (субд) накладные и там уже сравнивать.
...
Рейтинг: 0 / 0
09.08.2016, 02:24
    #39288634
iPOJO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение двух xml
Создаешь два потока, в каждом из них запускаешь
Код: java
1.
SAXParser.parse(file, handler)


для своего файла.
Когда попадается товар, смотришь по id, а не попадался ли такой товар уже в другом файле. Для этого создаешь хэш-таблицу
Код: java
1.
new ConcurrentHashMap<productId, MetaInfo>()


где MetaInfo - небольшой объект с полями productId, хэшем и доп. признаками, если надо.
Использовать атомарный метод Map.putIfAbsent().
Если товар не встречался, то вставляем в таблицу, если встречался - сравниваем хэши.
...
Рейтинг: 0 / 0
09.08.2016, 02:29
    #39288635
iPOJO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение двух xml
PS хеши от контента товара, разумеется.
...
Рейтинг: 0 / 0
09.08.2016, 10:29
    #39288744
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение двух xml
sanringo, xml не очень годен для сравнений.

Если-бы продукты лежали в БД - то можно было взять реляционный оператор MINUS
и решить задачу в 1 строчку.

В твоем случае я-бы внес больше доп-информации в сам документ. В заголовок
положить учет количества документов, их даты обновлений, и неплохо-бы обеспечить
сортировку product-ов по какому-то полю.
...
Рейтинг: 0 / 0
09.08.2016, 11:17
    #39288777
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение двух xml
[quot mayton]sanringo, xml не очень годен для сравнений.

Если-бы продукты лежали в БД - то можно было взять реляционный оператор MINUS
и решить задачу в 1 строчку.

если бы продукты лежали бы в БД и нужно было бы сравнить если есть совпадения в продуктых с ссылкой на заказы, категорию, роль категоии и т.д. вглубь то становится неитересно на уровне бд сравнивать.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / сравнение двух xml / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]