使用包含apply-templates变量的条件选择要执行的模板

时间:2010-06-09 09:02:47

标签: xslt variables

我有一个如下所示的模板

  

< xsl:template match =“more-info”mode =“docuSection”>   HTML   < / XSL:模板>

并通过电话

应用
  

< xsl:apply-templates select =“。”模式= “docuSection”/>

因此当当前节点具有 more-info 元素时应用模板,是否有办法使该模板应用相同的调用并且条件包括全局变量,例如match =“$ mode ='edit'或more-info”

最诚挚的问候, 凯沙夫

1 个答案:

答案 0 :(得分:1)

  

有没有办法制作这个模板   得到同样的电话和   条件包括a   全局变量例如   match =“$ mode ='edit'或more-info”

在XSLT 2.0中,这是完全合法的

<xsl:template match="more-info[$mode = ('edit', 'more-info')]"
mode="docuSection">

在XSLT 1.0中禁止在匹配模式中使用变量或键引用。

但是,可以使用以下任一技术

予。在<xsl:apply-templates>指令中,指定要处理的节点的确切节点列表。

<xsl:apply-templates mode="docuSection" 
     select="self::*[$mode = 'edit' or $mode='more-info']" />

||。使匹配模式更通用,但仅在满足所需条件时才在模板中进行任何处理:

<xsl:template match="more-info" mode="docuSection">
 <xsl:if test="$mode = 'edit' or $mode='more-info'">
    html
 </xsl:if>
</xsl:template>