简体   繁体   English

XML:将xml文档附加到另一个文档的节点中

[英]XML: to append xml document into the node of another document

I have to insert file1.xml elements into another file2.xml. 我必须将file1.xml元素插入另一个file2.xml。 file2.xml has several node and each node has it's node_id. file2.xml有几个节点,每个节点都有node_id。 is there any way to do that. 有没有办法做到这一点。

let suppose : 让我们假设:

file1.xml : file1.xml:

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

file2.xml : file2.xml:

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

I want ? 我想要 ? file2.xml : file2.xml:

         < root>
            < node>
               <node_1>......</node_1> [here i want to append the file1.xml]
            </node>
         </root>
  1. Iterate over all the node_id elements in file2. 迭代file2中的所有node_id元素。
  2. For each one, look up corresponding node_x element in file1. 对于每一个,在file1中查找相应的node_x元素。
  3. Add node_x from file1 into file2 将node_x从file1添加到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);        

The result would be: 结果将是:

<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>

Usual approach: 通常的做法:

parse both documents from file1 and file2 into Document objects (SAXParser, jDom, dom4j), then import element <node_1> from the first document to the second and add it to <node> . 将file1和file2中的Document解析为Document对象(SAXParser,jDom,dom4j),然后元素<node_1>从第一个文档导入到第二个文档,并将其添加到<node> Then delete the corresponding <node_id> element. 然后删除相应的<node_id>元素。

Importing is necessary, the Document implementations offer the correct methods for this process! 导入是必要的, Document实现为此过程提供了正确的方法! Just adding an element from one document to another documents will result in DOMExceptions . 只需将一个文档中的元素添加到另一个文档中,就会产生DOMExceptions

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM