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

时间:2011-01-06 08:43:46

标签: java xml

我必须将file1.xml元素插入另一个file2.xml。 file2.xml有几个节点,每个节点都有node_id。有没有办法做到这一点。

让我们假设:

file1.xml:

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

file2.xml:

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

我想要? file2.xml:

         < root>
            < node>
               <node_1>......</node_1> [here i want to append the file1.xml]
            </node>
         </root>

2 个答案:

答案 0 :(得分:8)

  1. 遍历所有node_id file2中的元素。
  2. 每个人, 查找相应的node_x元素 在file1中。
  3. 将file1中的node_x添加到 file2的
  4. 以下代码说明了这一点:

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

    结果将是:

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

答案 1 :(得分:2)

通常的做法:

将file1和file2中的文档解析为Document个对象(SAXParser,jDom,dom4j),然后将 import 元素<node_1>从第一个文档解析到第二个文档并添加它到<node>。然后删除相应的<node_id>元素。

导入是必要的,Document实现为此过程提供了正确的方法!只需将一个文档中的元素添加到另一个文档,即可生成DOMExceptions