2012-04-03 75 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字段。