java - 如何用java删除XML节点

标签 java xml dom

我需要删除“对象”标签,但我需要保留并保留内容。那可能吗?

<ds:KeyInfo>
    <wsse:SecurityTokenReference>
        <wsse:Reference URI="#b3f74c53-b79f-4dec-aa26-ca552f8f8745"/>
    </wsse:SecurityTokenReference>
</ds:KeyInfo>
<ds:Object Id="id1"> // <-Remove this
    <wsu:Timestamp>
        <wsu:Created>2017-03-28T20:21:44Z</wsu:Created>
        <wsu:Expires>2017-03-28T23:08:24Z</wsu:Expires>
    </wsu:Timestamp>
 </ds:Object>  // <-Remove this

我尝试过:

Node node = xml.getElementById("id1");
xml.getDocumentElement().removeChild(node);

但是:

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

最佳答案

首先,只有要删除的节点的父节点才能删除它:

Node nodeToBeRemoved = xmlDoc.getElementById("id1");
Node parentNode = nodeToBeRemoved.getParentNode();
Node removedNode = parentNode.removeChild(nodeToBeRemoved);

其次,为了“保留并保留内容”,您需要将已删除元素的子元素附加到其父元素:

NodeList removedChildren = removedNode.getChildNodes();
for (int i = 0 ; i < removedChildren.getLength(); i++) {
    Node child = removedChildren.item(i);
    if (child.getNodeType() == Node.ELEMENT_NODE) {
        parentNode.appendChild(child);
    }
}

关于java - 如何用java删除XML节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43080300/

相关文章:

java - 如何禁止枚举类型中的某些枚举值到 XML 表示映射?

python - 来自 minidom getElementsByTagName 的元素顺序

javascript - 可以向 HTML5 文档类型添加额外数据

javascript - 传递 <tr> id 值 javascript 函数

java - IntelliJ 可以将属性(get/setter)重构为字段吗?

java - 为非实体请求实现GWT RequestFactory服务

java - java中的Json时间持续时间格式化问题

sql - TSQL\XPATH - 获取 CROSS APPLY 节点(子节点)上元素的正确 XPath 索引

带有强调字符的 python xml.sax 解析问题

java - 区分 "out of range"或 "in range, but no listening server socket"? (蓝牙)