XML: add an XML document to the node of another document

I need to insert file1.xml elements into another file2.xml file. file2.xml has multiple node, and each node has node_id. is there any way to do this.

let suppose:

file1.xml:

         < root> 
            <node_1>......</node_1> 
         </root> 

file2.xml:

         < root>
            < node>
               < node_id>1'<'/node_id>
            < /node>
         < /root> 

I want to? file2.xml:

         < root>
            < node>
               <node_1>......</node_1> [here i want to append the file1.xml]
            </node>
         </root>
+5
source share
2 answers
  • Iterate over the entire node_id of the elements in the file2.
  • For each of them, find the corresponding node_x element in file1.
  • Add node_x from file1 to file2

The following code illustrates this:

DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();

//build DOMs
Document doc1 = builder.parse(new File("file1.xml"));
Document doc2  = builder.parse(new File("file2.xml"));

//get all node_ids from doc2 and iterate
NodeList list = doc2.getElementsByTagName("node_id");
for(int i = 0 ; i< list.getLength() ; i++){

    Node n = list.item(i);

    //extract the id
    String id = n.getTextContent();

    //now get all node_id elements from doc1
    NodeList list2 = doc1.getElementsByTagName("node_"+id);
    for(int j = 0 ; j< list2.getLength() ; j++){

        Node m = list2.item(j);

        //import them into doc2
        Node imp = doc2.importNode(m,true);
        n.getParent().appendChild(imp);
    }
}

//write out the modified document to a new file
TransformerFactory tFactory = TransformerFactory.newInstance(); 
Transformer transformer = tFactory.newTransformer();
Source source = new DOMSource(doc2);
Result output = new StreamResult(new File("merged.xml"));
transformer.transform(source, output);        

Result:

<root>
  <node>
    <node_id>1</node_id>
    <node_1>This is 1</node_1>
  </node>
  <node>
    <node_id>2</node_id>
    <node_2>This is 2</node_2>
  </node>
  <node>
    <node_id>3</node_id>
    <node_3>This is 3</node_3>
  </node>
</root>
+7
source

The usual approach:

file1 file2 Document (SAXParser, jDom, dom4j), <node_1> <node>. <node_id>.

, Document ! DOMExceptions.

+2

All Articles