2013-10-11 4 views
2

У меня есть несколько xml-файлов в arrayList, например A.xml B.xml , и я хочу объединить некоторые из узлов, в то время как остальные останутся, как с помощью java. Я новичок в использовании, поэтому не знаю, как это сделать.Слияние разных узлов нескольких файлов XML с использованием JAVA

XML:

<?xml version="1.0" encoding="UTF-8"?> 
<nta> 
<declaration> 
    bool A, B; 
    bool C; 
</declaration> 
<template> 
    <location id="1" x="10" y="10"/> 
    <transition> 
     <source ref="3"/> 
    </transition>  
</template> 
<system> system AND;</system> 
</nta> 

B.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<nta> 
<declaration> 
    int f,k; 
    bool D; 
</declaration> 
<template> 
    <location id="100" x="40" y="89"/> 
    <transition> 
     <source col="9"/> 
    </transition>  
</template> 
<system> system OR;</system> 
</nta> 

И выход:

<?xml version="1.0" encoding="UTF-8"?> 
<nta> 
<declaration> 
    bool A, B; 
    bool C; 
    int f,k; 
    bool D; 
</declaration> 
<template> 
    <location id="1" x="10" y="10"/> 
    <transition> 
     <source ref="3"/> 
    </transition>  
</template> 
<template> 
    <location id="100" x="40" y="89"/> 
    <transition> 
     <source col="9"/> 
    </transition>  
</template> 
<system> system AND, OR;</system> 
</nta> 

В основном я хочу, чтобы объединить declaration и system и покоя быть последовательным в выходном файле xml. Как это сделать с помощью JAVA? Извините, за длинную статью!!!

+0

Взгляните на [это] (http://stackoverflow.com/a/873604/2071828) –

+0

с использованием 'JDOM'it должно быть куском пирога. – Sage

ответ

3

По сравнению с другими имеющимися обработки XML API, для меня, имея DOMBuilder и SAXBuilderJDOM лучше:

  • Изменение XML-документ
  • XML дерево перемещения и произвольного доступа к любому разделу
  • Слияние документов

Это полный рабочий пример для слияния tw о XML документ:

SAXBuilder builder = new SAXBuilder(); 
    Document doc1 = builder.build(new File("E:\\XML1.xml")); 
    Document doc2 = builder.build(new File("E:\\XML2.xml")); 

    String rootName = doc1.getRootElement().getName(); 
    Element newRoot = new Element(rootName); 
    Document newDoc = new Document(newRoot); 

    Element root1 = doc1.getRootElement(); 
    Element root2 = doc2.getRootElement(); 

     // creating declaraion element by merging the declaration content 
    Element declaration = new Element("declaration"); 
    declaration.addContent(root1.getChildText("declaration")); 
    declaration.addContent(root2.getChildText("declaration")); 
    newRoot.addContent(declaration); // add declaration element to new document 

     newRoot.addContent(root1.getChild("template").clone()); 
         // directly adding template from document XML1, 
         //after getting template child, 
        //it needs to be cloned to detached from its parent 

    newRoot.addContent(root2.getChild("template").clone()); 
         // same for document XML2 

    /*** now code yourself for system element here ***/ 

    XMLOutputter outputter = new XMLOutputter(); 
    outputter.output(newDoc, System.out); 
        // output the new doc, pass your OutputStream to this function 
+0

Thakn вы очень много. Это прекрасно работает. Но у меня есть другой вопрос. Что делать, если в первом XML есть три разных «шаблона», а во втором - пять, и я хочу сохранить их структуру. Как я это делаю? Использование цикла 'for'? – Vasouli

+0

есть. используя цикл 'for'. попробуйте. Однако общий стиль использования сайта заключается в том, чтобы отметить ответ, принятый, если вы считаете, что он решил ваш вопрос. – Sage

+0

О, извините, что я этого не знал. Я зеленая стрелка идет с голосованием, и я не могу голосовать, пока моя репутация не будет 15 – Vasouli

0

Вы можете использовать XML-парсер, такой как dom, чтобы прочитать необходимые детали (декларация и система), а затем собрать их, чтобы получить требуемый результат.

вы получите множество примеров на reading и writing xml в java.

0

Анализировать XML, как я пишу here или каким-либо другим способом над затем использовать javax.xml.parsers.DocumentBuilder из here делать то, что вы want.Create новый XML-документ.

Смежные вопросы