java - 在 Java 中从 XML 文件中删除节点

标签 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>

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

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

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);”行抛出以下异常:

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

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

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

如果我打印该行,它也会说父节点是“状态”,所以我什至无法弄清楚这两行之间的区别是什么。

最佳答案

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

关于java - 在 Java 中从 XML 文件中删除节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13843955/

相关文章:

java - <?扩展 > Java 语法

XMLParse( ) 抛出 Content is not allowed in prolog 错误

php - 从 xml 变量中过滤掉撇号

安卓 XML : L shape text view

javascript - jQuery:如果用户点击的元素类与被点击元素的类匹配,则删除该类元素

java - 使用 Scanner 类解析字符串

Java 自动装箱和三元运算符的疯狂

javascript - 通过javascript强制firefox在DOM解析中跳过 "text nodes"

javascript - 如何遍历 DOM 以确定最大嵌套深度?

java - 将随机访问文件透明写入 zip 文件