gpt4 book ai didi

java - 如何删除一个父节点及其所有子节点?

转载 作者:行者123 更新时间:2023-12-01 14:01:13 24 4
gpt4 key购买 nike

我有以下 .xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book id="1">
<name>Book-1</name>
<author>Author-1</author>
</book>
</bookstore>

问题是我想删除 id="1" 的图书。我想要删除图书节点的方法,以便自动删除其所有子节点。有没有办法做到这一点?

最佳答案

您可以使用 XSLT 脚本:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="book[@id='1']"/>
</xsl:stylesheet>

基本上,我们所做的是复制整个文件,而不复制与模式 "book[@id='1']"匹配的实体

XSLT 当然会带来一些开销,但优点是:

  • 当查询变得更加复杂时,您可以轻松修改转换
  • 执行机制比您自己编写的代码更无错误(无意冒犯,但 XSLT 程序已被成千上万的人使用,因此可以调试简单的错误)
  • 您可以使用多种程序来测试转换,通过对转换进行硬编码,您必须自己编写测试平台。
  • 在某些情况下,XSLT 甚至会运行得更快,因为程序员试图优化执行。

使用 DOM 解析器(不指定整个文件,希望您熟悉 DOM):

NodeList nList = doc.getElementsByTagName("book");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
if(eElement.getAttribute("id").equals("1")) {
doc.removeChild(eElement);
}
}
}

关于java - 如何删除一个父节点及其所有子节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19337792/

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