|
|
|
сравнение двух xml
|
|||
|---|---|---|---|
|
#18+
Даны два xml-файла: старый и новый. Оба содержат данные о товарах с элементами <product>. Задача вывести продукты, которые изменились, новые и исчезнувшие. Требования: быстрота обработки, минимум занимаемой памяти при обработке. Пока на ум приходит задействовать SAX парсер. Считать из нового файла первый объект, пробежаться по старому файлу. Если нашли, то сравниваем, иначе в результат с пометкой "новый". Если не равны заносим в результат с пометкой "изменён". Может есть вариант по-проще и спец библиотеки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2016, 23:25 |
|
||
|
сравнение двух xml
|
|||
|---|---|---|---|
|
#18+
sanringo Считать из нового файла первый объект, пробежаться по старому файлу. Если нашли, то сравниваем, иначе в результат с пометкой "новый". Потом считать второй объект и снова пробежаться по старому файлу? Имхо это не самый эффективный способ. O(n^2) На вскидку я бы предложил вариант тем же SAX или StAX прочитать все продукты из первого файла и поскладывать их в хэшмап (их уникальное представление в качестве key), потом продукты из второго файла и в тот же хэшмап. В качестве value объект с данными которые нужно проверить на изменение и статус ("есть только в первом файле", "есть только во втором", "есть и там и там данные не поменялись", "есть и там и там данные поменялись"). Ну или типа того. Так должно получиться O(n). Правда не знаю насколько подобное подойдет вам по памяти, но должно быть быстрее чем полный проход второго файла для каждого элемента из первого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2016, 00:10 |
|
||
|
сравнение двух xml
|
|||
|---|---|---|---|
|
#18+
Usman, XMLUnit + assertXMLEquals(xml1, xml2) +1 С уважением, Валентин ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2016, 06:36 |
|
||
|
сравнение двух xml
|
|||
|---|---|---|---|
|
#18+
можно через xslt преобразование получить фактически выжимку из новых или исчезнувших. есть плюсы есть минусы у подхода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2016, 10:28 |
|
||
|
сравнение двух xml
|
|||
|---|---|---|---|
|
#18+
llemingесть плюсы есть минусы у подхода. +1 Вообще, XML это транспорт из точки А в точку Б. Анализировать надо в информационной системе. Было бы странно, если бы вы в тачке строителей по пути начали песок анализировать. Есть вариант загнать в ИС (субд) накладные и там уже сравнивать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2016, 11:54 |
|
||
|
сравнение двух xml
|
|||
|---|---|---|---|
|
#18+
Создаешь два потока, в каждом из них запускаешь Код: java 1. для своего файла. Когда попадается товар, смотришь по id, а не попадался ли такой товар уже в другом файле. Для этого создаешь хэш-таблицу Код: java 1. где MetaInfo - небольшой объект с полями productId, хэшем и доп. признаками, если надо. Использовать атомарный метод Map.putIfAbsent(). Если товар не встречался, то вставляем в таблицу, если встречался - сравниваем хэши. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 02:24 |
|
||
|
сравнение двух xml
|
|||
|---|---|---|---|
|
#18+
PS хеши от контента товара, разумеется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 02:29 |
|
||
|
сравнение двух xml
|
|||
|---|---|---|---|
|
#18+
sanringo, xml не очень годен для сравнений. Если-бы продукты лежали в БД - то можно было взять реляционный оператор MINUS и решить задачу в 1 строчку. В твоем случае я-бы внес больше доп-информации в сам документ. В заголовок положить учет количества документов, их даты обновлений, и неплохо-бы обеспечить сортировку product-ов по какому-то полю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 10:29 |
|
||
|
сравнение двух xml
|
|||
|---|---|---|---|
|
#18+
[quot mayton]sanringo, xml не очень годен для сравнений. Если-бы продукты лежали в БД - то можно было взять реляционный оператор MINUS и решить задачу в 1 строчку. если бы продукты лежали бы в БД и нужно было бы сравнить если есть совпадения в продуктых с ссылкой на заказы, категорию, роль категоии и т.д. вглубь то становится неитересно на уровне бд сравнивать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 11:17 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39288777&tid=2123837]: |
0ms |
get settings: |
8ms |
get forum list: |
22ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
74ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 208ms |
| total: | 399ms |

| 0 / 0 |
