2011-01-06 27 views
5

別のfile2.xmlにfile1.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. は、次のコードは、この説明 FILE2

にFILE1からnode_xを追加します。

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

+0

しかし、DocumentにはメソッドimportDocumentがないようです... – tObi

2

通常のアプローチ:

が2番目の最初のドキュメントからDocumentオブジェクト(のSAXParser、JDOM、DOM4J)、次いでインポート素子<node_1>にfile1とfile2の両方からドキュメントを解析して<node>に追加してください。その後、対応する<node_id>要素を削除します。

をインポートする必要があります。Documentの実装では、このプロセスの正しい方法が提供されています。ある文書から別の文書に要素を追加するだけで、結果はDOMExceptionsとなります。

+0

おかげアンドレアスに追加する方法がありますnode_idに基づいてnode_idを削除せずに – Bibhaw

関連する問題