3

我正在尝试创建一个 xsl 模板,该模板将接受通配符作为模板匹配的一部分,如以下示例所示:

<xsl:template match="*_Nokia_5.0">
  <xsl:value-of select="."/>
  <xsl:text>,</xsl:text>
  <xsl:if test="position()=last()">
    <xsl:text>&#10;</xsl:text>
  </xsl:if>

我想要实现的是“匹配任何以“Nokia_5.0”作为字符串一部分的标签。有什么办法可以在 xslt 1.0 中做到这一点?

谢谢

4

2 回答 2

3

使用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')]">
于 2012-06-14T12:06:07.967 回答
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>
于 2012-06-14T09:16:40.447 回答