我正在尝试创建一个xsl模板,它将接受通配符作为模板匹配的一部分,如下例所示:
<xsl:template match="*_Nokia_5.0">
<xsl:value-of select="."/>
<xsl:text>,</xsl:text>
<xsl:if test="position()=last()">
<xsl:text> </xsl:text>
</xsl:if>
我想要实现的是'匹配任何带有'Nokia_5.0'的标签作为字符串的一部分。 我有什么办法可以在xslt 1.0中做到这一点吗?
由于
答案 0 :(得分:2)
使用contains(name(), "Nokia_5.0")
不是解决方案,因为它会在名称上返回误报:
myNokia_5.0isAwsome
但要求是名称必须结束并带有字符串'Nokia_5.0'
。
正确的解决方案:
在XSLT 2.0中:
<xsl:template match="*[ends-with(name(), 'Nokia_5.0')]">
在XSLT 1.0中:
<xsl:template match=
"*[substring(name(), string-length(name()) -8) = 'Nokia_5.0')]">
答案 1 :(得分:1)
假设您的意思是节点名称必须包含给定的字符串,您可以使用contains()
<xsl:template match='*[contains(name(), "Nokia_5.0")]'>
然而,这意味着任何不符合此要求的节点都缺少模板,如果您将模板应用于所有节点,则会按原样输出。
相反,您可以在模板定义中但不是在应用模板时使过滤器规定。
<xsl:apply-templates select='node[contains(name(), "Nokia_5.0")]' />
....
<xsl:template match='node'>
<xsl:value-of select='.' />
</xsl:template>