powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Сравнение двух xml на java
7 сообщений из 7, страница 1 из 1
Сравнение двух xml на java
    #37678850
lykeit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята, посоветуйте в каком направлении двигаться.
Есть 2 xml файла, нужно данными из одного обновить данные другого. Если есть совпадение по полю title, то изменить значения дочерних элементов данными из второго файла, если нет совпадений, то новые данные дозаписать в первый файл.

Интернtты говорят, что нужно использовать SAX и Xpath. Но... каким образом организовать поиск? Нужно ли преобразовать один из эксэмэлей в список, или оба их преобразовывать? Я не знаю как через xpath организовать поиск в двух файлах. Это два потока, одновременный парсинг двух документов?

Ребята, подскажите в каком направлении копать. Лопата есть

Спасибо!!!
...
Рейтинг: 0 / 0
Сравнение двух xml на java
    #37678963
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IMHO самый быстрый способ для написания, но не самый эффективный по производительности-это XSL.Если не для веба , то вполне сгодится.
...
Рейтинг: 0 / 0
Сравнение двух xml на java
    #37678972
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lykeit,
если бы тупая вставка нода-дерева в другой нод-дерево, то можно было бы автоматизировать.
А тут - merge.
Т.е. руками, как напишешь, так и будет.
imho
- поищи в парсерах XML готовую либу на вставку поддерева в дерево - это ускорит.
...
Рейтинг: 0 / 0
Сравнение двух xml на java
    #37679006
lykeit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Troglodit, как раз для веба и + на java.
Petro123, то есть объединить два файла, а затем уже бегать по нему? А смогу ли я как-то управлять скажем первой и второй частью такого объединенного файла с тем чтобы оставить если что записи из второй части... как-то тяжело преставляется. Моожно чуть подробней? Спасибо))))))
...
Рейтинг: 0 / 0
Сравнение двух xml на java
    #37679214
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lykeitPetro123, то есть объединить два файла
нет. Это уже в конце БЛ.
lykeitЕсли есть совпадение по полю title, то изменить значения дочерних элементов данными из второго файла, если нет совпадений, то новые данные дозаписать в первый файл.
ровно так, и делай:
- цикл по нодам
- совпадает?
- ЦЕЛИКОМ УДАЛЯЕМ подветку
- ЦЕЛИКОМ вставляем подветку.
ЗЫ. Бегать по обоим.
...
Рейтинг: 0 / 0
Сравнение двух xml на java
    #37679355
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lykeitРебята, подскажите в каком направлении копать. Лопата есть
Я бы сделал так (груви, т.к. лень придумывать классы):

Код: java
1.
2.
3.
4.
  def data1 = loadFromXml(xml1);
  def data2 = loadFromXml(xml2);
  def union =  union(data1,data2);
  saveAsXml(union);



т.е. преобразовал XML в Java-классы (это отлично может сделать и JAXB, и Digester) и реализовал логику сравнения чисто на классах. Потом полученную структуру сохранил бы в XML.

Код union выглядел бы примерно так (лень вспоминать названия функций, тут идея):
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Map<Title,Entity> dataMap1; // Entity также содержит поле title!
Map<Title,Entity> dataMap2;
List<Entity> result;
for (String entry : dataMap1.entrySet()) {
  String title = entry.key();
  String body = entry.value();
  if (dataMap2.contains(title)) {
    result.add(dataMap2.get(title)) // есть совпадение по полю title во втором наборе данных, берем значения оттуда
  } else {
    result.add(body); // нет совпадения, добавляем исходные данные
  }
}



Правда, я не совсем понял из ТЗ, что делать с данными, которые есть во втором файле и которых нет в первом.
...
Рейтинг: 0 / 0
Сравнение двух xml на java
    #37679418
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lykeit,
псевдокод
Код: pascal
1.
2.
3.
4.
5.
XmlNode:=Doc.selectSingleNode('//ns0:FirstName');
XmlNodeI:=DocI.selectSingleNode('//ns0:FirstName');

(XMLNode.selectNodes('//ns0:FirstName/*') as IXMLDOMSelection).removeAll; // удаляет всё поддерево
xmlNode.appendChild(XMLNodeI.cloneNode(true));  // копирует всё поддерево
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Сравнение двух xml на java
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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