如何在XSLT处理中排除指定节点?新手技术求助
解决XSLT处理时忽略指定节点的问题
嘿,作为XSLT新手遇到这种默认输出的问题太正常了!你的需求是处理时忽略<b>节点,不让结果末尾出现123,核心问题在于XSLT的内置模板行为——当你的样式表里没有匹配某个节点的模板时,它会自动用内置模板处理,其中文本节点会直接输出到结果里。所以<b>123</b>里的文本就被默认输出了。
给你两种简单的解决方案,按需选就行:
方案1:专门忽略<b>节点
直接在你的XSLT里加一个匹配<b>节点的空模板,这样它就不会输出任何内容了:
<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="hello-world"> <HTML><HEAD><TITLE></TITLE></HEAD><BODY><H1> <xsl:value-of select="greeting"/> </H1> <xsl:apply-templates select="greeter"/> </BODY></HTML> </xsl:template> <xsl:template match="greeter"> <DIV>from <I><xsl:value-of select="."/></I></DIV> </xsl:template> <!-- 新增:匹配<b>节点,不输出任何内容 --> <xsl:template match="b"/> </xsl:stylesheet>
方案2:全局禁止默认文本输出(更通用)
如果以后还有其他不需要输出的文本节点,这个方法更省心。添加一个匹配所有文本节点的空模板,这样所有没被你主动用<xsl:value-of>提取的文本都不会被输出:
<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="hello-world"> <HTML><HEAD><TITLE></TITLE></HEAD><BODY><H1> <xsl:value-of select="greeting"/> </H1> <xsl:apply-templates select="greeter"/> </BODY></HTML> </xsl:template> <xsl:template match="greeter"> <DIV>from <I><xsl:value-of select="."/></I></DIV> </xsl:template> <!-- 新增:匹配所有文本节点,禁用默认输出 --> <xsl:template match="text()"/> </xsl:stylesheet>
两种方案都能解决你的问题,方案1针对性强,只忽略<b>;方案2更通用,适合后续可能有更多无关节点的场景~
内容的提问来源于stack exchange,提问作者Chrissy H
相关产品推荐
相关产品推荐

