Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何用新节点替换dom节点?_Java - Fatal编程技术网

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

Java 如何用新节点替换dom节点?,java,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 = Docum

我想用我创建的新节点替换现有的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();
                }
String messageBody=“”
File File=新文件(“doc.xml”);
DocumentBuilderFactory dbfac=DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder=dbfac.newDocumentBuilder();
doc=docBuilder.parse(文件);
元素节点=DocumentBuilderFactory
.newInstance()
.newDocumentBuilder()
.parse(新的ByteArrayInputStream(messageBody.getBytes()))
.getDocumentElement();
System.out.println(node.getClass());
doc.getDocumentElement().replaceChild((节点)节点,doc.getDocumentElement().getFirstChild());
}捕获(例外e){
e、 printStackTrace();
}
我得到一个运行时错误
错误\u文档\u错误:
一个节点在不同的文档中使用,而不是在创建它的文档中使用


有人能提出不同的建议吗?

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

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

错误的\u文档\u错误意味着您的代码正在使用两个不同的DOM。第一个DOM是“现有”DOM。这可能就是您要将新节点添加到的节点。第二个DOM是“新”DOM,即在创建新节点时创建的DOM

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

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