Простой ответ: сопоставление с образцом.
<xsl:template match="item[../@type = 'whatever']"/>
Второй простой ответ: когда вам нужны ссылки на переменные или параметры (вы не можете использовать их в шаблонах), используйте инструкцию xsl:choose
.
<xsl:template match="item">
<xsl:param name="pType"/>
<xsl:choose>
<xsl:when test="$pType = 'whatever'">
</xsl:when>
<xsl:when test="$pType = 'otherthing'">
</xsl:when>
</xsl:choose>
</xsl:template>
Сложный ответ: используйте именованную ссылку на шаблон.
<xsl:variavle name="vTemplate" select="document('')/xsl:template/@name"/>
<xsl:template match="xsl:template/@name[.='typeA']" name="typeA">
<xsl:param name="pContext"/>
</xsl:template>
<xsl:template match="xsl:template/@name[.='typeB']" name="typeB">
<xsl:param name="pContext"/>
</xsl:template>
<xsl:template match="document">
<xsl:apply-templates select="$vTemplate[.='typeA']">
<xsl:with-param name="pContext" select="item"/>
</xsl:apply-templates>
</xsl:template>
Или посмотрите на Димитра FXSL .