gpt4 book ai didi

java - 使用 java 解析器删除 XML 节点

转载 作者:搜寻专家 更新时间:2023-10-30 19:58:05 24 4
gpt4 key购买 nike

在下面的示例 XML 中,如果 E=13,如何使用 java 解析器删除整个 B 节点。

<xml>
<A>
<B>
<C>
<E>11</E>
<F>12</F>
</C>
</B>
<B>
<C>
<E>13</E>
<F>14</F>
</C>
</B>
</A>

请指教。

最佳答案

替代 DOM 方法

或者,您可以使用 JDK 中的 XPath 功能找到值为“13”的“B”元素,然后将其从其父元素中删除,而不是对 XML 文档进行暴力遍历:

import java.io.File;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.xpath.*;
import org.w3c.dom.*;

public class Demo {

public static void main(String[] args) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
Document document = dbf.newDocumentBuilder().parse(new File("input.xml"));

XPathFactory xpf = XPathFactory.newInstance();
XPath xpath = xpf.newXPath();
XPathExpression expression = xpath.compile("//A/B[C/E/text()=13]");

Node b13Node = (Node) expression.evaluate(document, XPathConstants.NODE);
b13Node.getParentNode().removeChild(b13Node);

TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
t.transform(new DOMSource(document), new StreamResult(System.out));
}

}

使用 XPath 的优点是更易于维护,如果结构发生变化,只需对代码进行一行更改。此外,如果文档的深度增加,基于 XPath 的解决方案将保持相同的行数。

非 DOM 方法

如果您不想将 XML 实现为 DOM。您可以使用转换器和样式表来删除节点:

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com