2011-01-06 142 views
5

我必須將file1.xml元素插入到另一個file2.xml中。 file2.xml有幾個節點,每個節點都有它的node_id。有沒有辦法做到這一點。XML:將xml文檔附加到另一個文檔的節點中

咱們假設:

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> 

回答

7
  1. 迭代file2中的所有node_id 元素。
  2. 對於每一個, 在file1中查找對應的node_x元素 。
  3. file1中添加node_x到 文件2

下面的代碼說明了這一點:

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

哦,太棒了:)我非常感謝你。這正是我正在尋找的東西。 – Bibhaw 2011-01-06 10:20:35

2

通常的做法:

解析來自file1和file2都文檔轉換成從所述第一文檔Document對象(的SAXParser,JDOM DOM4J),然後進口元件<node_1>到第二和將其添加到<node>。然後刪除相應的<node_id>元素。

導入是必要的,Document實現爲此過程提供正確的方法!從一個文檔添加元素到另一個文檔將導致DOMExceptions

+0

感謝安德烈亞斯,有沒有什麼辦法,以追加到節點基於node_id並且不刪除node_id。 – Bibhaw 2011-01-06 09:25:29

相關問題