Слияние XML-файлов Java - PullRequest
       2

Слияние XML-файлов Java

1 голос
/ 11 августа 2011

У меня есть два разных xml-файла, описанных ниже, и я хочу объединить эти xml-файлы и получить ожидаемый результат, используя синтаксический анализ xpath или dom, но не XSLT, так как xmls всегда не совпадают

XML1.xml

<personinfo>
   <person>
     <name><name>
     <age></age>
     <address>
     <street></street>
     <city></city>
     <address>
   </person>
   <person>
     <name><name>
     <age></age>
     <address>
     <street></street>
     <city></city>
     <address>
   </person>
   <person>
     <name><name>
     <age></age>
     <address>
     <street></street>
     <city></city>
     <address>
   </person>
</personinfo>

XML2.xml

<personinfo>
   <person>
     <name>tom<name>
     <age>26</age>
     <address>
     <street>main street</street>
     <city>washington</city>
     <address>
   </person>
   <person>
     <name>mike<name>
     <age>30</age>
     <address>
     <street>first street</street>
     <city>dallas</city>
     <address>
   </person>
</personinfo>

Expected.xml

<personinfo>
   <person>
     <name>tom<name>
     <age>26</age>
     <address>
     <street>main street</street>
     <city>washington</city>
     <address>
   </person>
   <person>
     <name>mike<name>
     <age>30</age>
     <address>
     <street>first street</street>
     <city>dallas</city>
     <address>
   </person>
   <person>
     <name><name>
     <age></age>
     <address>
     <street></street>
     <city></city>
     <address>
   </person>
</personinfo>

Заранее спасибо ....

Ответы [ 2 ]

0 голосов
/ 12 августа 2011
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(file);
doc.getDocumentElement().normalize();
NodeList nodeLst = doc.getElementsByTagName("employee");
for (int s = 0; s < nodeLst.getLength(); s++) 
{
stkey=getXMLData(s,nodeLst,"id");
     keylist.add(stkey);// adding integer keys to a Linked List
data.put(stkey, stkey);                 
data.put(stkey+"first",getXMLData(s,nodeLst,"firstname"));                  
data.put(stkey+"last",getXMLData(s,nodeLst,"lastname"));                    
     data.put(stkey+"loc",getXMLData(s,nodeLst,"location"));    
     data.put(stkey+"occ",getXMLData(s,nodeLst,"occupation"));

}

это позволит получить значения тегов в хэш-карте и имена тегов в связанном списке. чтобы упростить вашу работу, вы можете добавить тип тега к ключу hashmap. Например: если мой ключ - это идентификатор сотрудника (в моем случае), я добавляю «сначала» к нему. Допустим, у кого-то есть идентификатор: 10001. Его данные будут храниться как: 10001, затем 10001first, 10001last, 10001loc, 10001occ. Теперь вы можете вызывать каждый ключ hashmap, получать элемент по имени добавленного тега и объединять его с вашим XML-файлом. Надеюсь, это поможет.

0 голосов
/ 11 августа 2011

Если у вас есть возможность создать новый XML-файл, вы можете проанализировать каждый из них, используя любой удобный вам анализатор. Сохраните теги в LinkedList из String LinkedLists и значения тегов в HashMap следующего типа: Данные LinkedHashMap = новый LinkedHashMap ();

Затем вы можете вызывать имена тегов из связанных списков, добавлять значения тегов из Hash Map и записывать их в новый файл XML. Когда я делал слияние XML, я использовал эту процедуру. Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...