XSL模板如何动态确定匹配哪种模式

问题描述

假设XSLT模板在两种模式下匹配元素,是否可以动态找出哪个模式触发了匹配?

在伪xslt中:

template match="elementname" mode="a b"  
    if %mode% = 'a' then do something
    if %mode% = 'b' then do something

(这在两种模式下90%的模板相同的情况下很有用,但在一种情况下,需要创建附加属性

(这个问题已经被问到了Is there a way to use mode in an xsl:if test?,我的错误是没有发现它。仍然感谢您的答复)

解决方法

您始终可以使用参数:

  <xsl:apply-templates select="*" mode="ab">
    <xsl:with-param name="sw">a</xsl:with-param>
  </xsl:apply-templates>


<xsl:template select="elementname" mode="a b">
  <xsl:param name="sw" />
  <xsl:if test="$sw='a'>do this</xsl:if>

</xsl:template>