我有这个XML文件:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<results>
<output>
<status>OK</status>
<usage>Please use it</usage>
<url/>
<language>english</language>
<category>science_technology</category>
<score>0.838661</score>
</output>
</results>
我想从此XML中删除标记<output> </output>
。
预计输出
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<results>
<status>OK</status>
<usage>Please use it</usage>
<url/>
<language>english</language>
<category>science_technology</category>
<score>0.838661</score>
</results>
我该怎么做?
答案 0 :(得分:4)
最简单的方法(几乎是机械地,没有思考):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="output"><xsl:apply-templates/></xsl:template>
</xsl:stylesheet>
将此转换应用于提供的XML文档:
<results>
<output>
<status>OK</status>
<usage>Please use it</usage>
<url/>
<language>english</language>
<category>science_technology</category>
<score>0.838661</score>
</output>
</results>
产生了想要的正确结果:
<results>
<status>OK</status>
<usage>Please use it</usage>
<url/>
<language>english</language>
<category>science_technology</category>
<score>0.838661</score>
</results>
<强>解释强>:
标识规则/模板“按原样”复制每个节点。
有一个模板会覆盖身份规则。它匹配任何output
元素并阻止它被复制到输出,但继续处理它的任何子元素。
记住:覆盖身份规则是最基本,最强大的XSLT设计模式。
答案 1 :(得分:2)
尽可能短:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="results">
<xsl:copy>
<xsl:copy-of select="output/*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
或使用身份规则:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="results">
<xsl:copy>
<xsl:apply-templates select="output/*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>