我有以下 .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 当然会引入一些开销,但优点是:
使用 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);
}
}
}
还有另一种简单的解决方案可用于完全解析 XML 文件。浏览Xstream的文档