如何删除父节点将其所有子节点?

时间:2013-10-12 18:39:08

标签: java android xml xslt

我有以下.xml文件

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

问题是我想删除id="1"的图书。我想要删除书籍节点的方式,以便自动删除其所有子节点。有办法吗?

2 个答案:

答案 0 :(得分: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当然会引入一些开销,但优点是:

  • 当查询变得更复杂时,您可以轻松修改转换
  • 执行机制比你自己编写的代码更无bug(没有冒犯,但XSLT程序被成千上万的人使用,因此很容易调试bug)。
  • 您可以通过对自己编写测试平台所需的转换进行硬编码来测试大量程序的转换。
  • 在某些情况下,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);
        }
    }
}

答案 1 :(得分:0)

还有另一种简单的解决方案可以解析XML文件。浏览Xstream

的文档