2013-05-18 43 views
0

這裏是我的代碼:團結的NodeLists在DOM(JAVA)

private NodeList union(NodeList left, NodeList right){ 

    NodeList result=null; 
    try{ 
     DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); 
     domFactory.setNamespaceAware(true); // never forget this! 

     DocumentBuilder newBuilder = domFactory.newDocumentBuilder(); 
     Document newDoc = newBuilder.newDocument(); 

     Element root = newDoc.createElement("root"); 
     newDoc.appendChild(root); 
     if(left!=null){ 
      for(int i=0;i<left.getLength();i++){ 
       Node tmp=(Node)left.item(i).cloneNode(true); 
       newDoc.adoptNode(tmp); 
       newDoc.getDocumentElement().appendChild(tmp); 
       //root.appendChild(newDoc.importNode((Node)left.item(i), true)); 
      } 
     } 
     if(right!=null){ 
      for(int i=0;i<right.getLength();i++){ 
       Node tmp=(Node)right.item(i).cloneNode(true); 
       newDoc.adoptNode(tmp); 
       newDoc.getDocumentElement().appendChild(tmp); 
       //root.appendChild(newDoc.importNode((Node)right.item(i), true)); 
      } 
     } 

     result=root.getChildNodes(); 
    } catch(ParserConfigurationException e){ 
     System.err.println(e); 
    } 

    return result; 
} 

在這段代碼我想兩個的NodeLists合併成一家。

它工作得很好,除了聯合後,節點失去了他們的父,祖先,前兄弟姐妹的上下文......所以如果我試圖對結果運行評估和使用父/ ansector /之前的兄弟/ etc軸上的結果,它失敗。

我該怎麼辦才能不會失去它?

謝謝。

回答

1

一個節點只能存在於一個文檔中。如果您希望複製的節點位於兩個文檔中,那麼您的運氣不好。您只能在目標文檔中創建新節點,並將子節點和屬性從舊節點移動到新節點。查看Document :: adoptNode(Node),找出可能最簡單的方法。