如何用新节点替换dom节点?

时间:2012-04-03 09:50:51

标签: java

我想用我创建的新节点替换现有的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:节点用于与创建节点不同的文档中。

任何人都可以建议以不同的方式做到这一点吗?

2 个答案:

答案 0 :(得分:4)

您需要通过新文档采用该节点,并调用Document.adoptNode()。请注意,adoptNode()本身不会将节点添加到目标文档中的任何位置,只允许您将其添加到DOM树中。您之后仍需要致电replaceChild()

答案 1 :(得分:1)

这个也花了我一点时间来理解。至少错误消息很有用,API也提供了线索。

WRONG_DOCUMENT_ERR表示您的代码正在使用两个不同的DOM。第一个DOM是&#34;现有的&#34;一。这可能是您要添加新节点的那个。第二个DOM是&#34; new&#34; one - 创建新节点时创建的那个。

您可以将新节点导入现有文档。导入不会将新节点添加到现有文档中;导入将创建一个与现有DOM具有相同文档所有者的新节点。然后,您需要通过诸如追加或替换之类的调用或任何所需操作将新节点添加到现有文档。

我没有在我面前有示例代码,但如果我认为您可以使用调试器来比较现有DOM中的元素和新元素的ownerDocument字段。