从Java中删除XML文件中的节点

时间:2012-12-12 16:15:38

标签: java xml dom

我有一个格式如下的XML文件:

<state>
  <image>
      <imageUrl>./testImages/testimage.png</imageUrl>
      <perspective id="0">
          <zoomLevel>1.0</zoomLevel>
          <offsetX>0.0</offsetX>
          <offsetY>0.0</offsetY>
      </perspective>
      <perspective id="1">
          <zoomLevel>1.0</zoomLevel>
          <offsetX>0.0</offsetX>
          <offsetY>0.0</offsetY>
      </perspective>
  </image>
</state>

在该文件中,我有多个图像节点,但这不是重点。我想要的是能够删除&lt;图像&gt;文档中的节点(及其所有子节点)。

到目前为止,我有以下代码:

private void updateImageElement(Element image, Model model) throws SAXException, IOException, ParserConfigurationException{
    Element rootElement = doc.getDocumentElement();

    rootElement.removeChild(image);
    image.getParentNode().removeChild(image);
}

“rootElement.removeChild(image);” line抛出以下异常:

org.w3c.dom.DOMException: NOT_FOUND_ERR: An attempt is made to reference a node in a context where it does not exist.

这很奇怪,因为如果我打印“rootElement”,它会显示“状态”,即IS图像的父节点。

然后我尝试了以下行(“image.getParentNode()。removeChild(image))。这个没有抛出异常,但也没有删除。

如果我打印那条线,它也说父节点是“状态,所以我甚至无法弄清楚两条线之间的区别是什么。

1 个答案:

答案 0 :(得分:2)

听起来您正在使用该文档的两个DOM副本,而doc用于一个副本,image来自另一个副本。您不会显示负责设置docimage的代码,但您需要确保它们来自同一节点树。