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

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

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

Спасибо!!!
...
Рейтинг: 0 / 0
26.02.2012, 22:34:49
    #37678963
Troglodit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух xml на java
IMHO самый быстрый способ для написания, но не самый эффективный по производительности-это XSL.Если не для веба , то вполне сгодится.
...
Рейтинг: 0 / 0
26.02.2012, 22:44:12
    #37678972
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух xml на java
lykeit,
если бы тупая вставка нода-дерева в другой нод-дерево, то можно было бы автоматизировать.
А тут - merge.
Т.е. руками, как напишешь, так и будет.
imho
- поищи в парсерах XML готовую либу на вставку поддерева в дерево - это ускорит.
...
Рейтинг: 0 / 0
26.02.2012, 23:16:18
    #37679006
lykeit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух xml на java
Troglodit, как раз для веба и + на java.
Petro123, то есть объединить два файла, а затем уже бегать по нему? А смогу ли я как-то управлять скажем первой и второй частью такого объединенного файла с тем чтобы оставить если что записи из второй части... как-то тяжело преставляется. Моожно чуть подробней? Спасибо))))))
...
Рейтинг: 0 / 0
27.02.2012, 09:31:01
    #37679214
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух xml на java
lykeitPetro123, то есть объединить два файла
нет. Это уже в конце БЛ.
lykeitЕсли есть совпадение по полю title, то изменить значения дочерних элементов данными из второго файла, если нет совпадений, то новые данные дозаписать в первый файл.
ровно так, и делай:
- цикл по нодам
- совпадает?
- ЦЕЛИКОМ УДАЛЯЕМ подветку
- ЦЕЛИКОМ вставляем подветку.
ЗЫ. Бегать по обоим.
...
Рейтинг: 0 / 0
27.02.2012, 10:38:56
    #37679355
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух xml на java
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
27.02.2012, 11:02:59
    #37679418
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух xml на java
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
Форумы / Java [игнор отключен] [закрыт для гостей] / Сравнение двух xml на java / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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