2012-04-03 85 views
2

我想用一個新的節點我有created.I我實現這個作爲如何用新節點替換一個dom節點?

String messageBody=" <imgGroup><img src="src" width="width" height="height" alt="alt" type="type" orient="orient"/></imgGroup>" 
File file=new File("doc.xml"); 
       DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance(); 
       DocumentBuilder docBuilder = dbfac.newDocumentBuilder(); 
       doc = docBuilder.parse(file); 
       Element node = DocumentBuilderFactory 
       .newInstance() 
       .newDocumentBuilder() 
       .parse(new ByteArrayInputStream(messageBody.getBytes())) 
       .getDocumentElement(); 
       System.out.println(node.getClass()); 
       doc.getDocumentElement().replaceChild((Node)node, doc.getDocumentElement().getFirstChild()); 
       }catch(Exception e){ 
        e.printStackTrace(); 
       } 

我得到一個運行時錯誤 WRONG_DOCUMENT_ERR:的節點在不同的文檔使用一個比替換現有的DOM節點創造它。

任何人都可以建議如何以不同的方式做到這一點嗎?

回答

3

您需要通過新文檔採用節點,調用Document.adoptNode()。請注意,adoptNode()本身不會在目標文檔的任何位置添加節點,只是允許您將其添加到DOM樹中。事後您仍然需要撥打replaceChild()

+0

謝謝.....其工作 – ravitech 2012-04-03 10:54:25

1

這也讓我花了一點時間去理解。至少錯誤信息是有用的,API也提供了線索。

WRONG_DOCUMENT_ERR表示您的代碼正在處理兩個不同的DOM。第一個DOM是「現有」的。這可能是您想要將新節點添加到的節點。第二個DOM是「新的」 - 創建新節點時創建的那個。

您可以將新節點導入到現有文檔中。雖然導入不會將新節點添加到現有文檔;導入將創建一個與現有DOM具有相同文檔所有者的新節點。然後,您需要通過諸如追加或替換之類的調用或任何期望的操作將新節點添加到現有文檔。

我沒有示例代碼在我面前,但如果我認爲您可以使用調試器來比較現有DOM中的元素和新元素的ownerDocument字段。

相關問題