Я хотел бы применить шаблон с различными параметрами на основе результата условного. Что-то вроде этого:XSLT: применять шаблоны с условными параметрами?
<xsl:choose>
<xsl:when test="@attribute1">
<xsl:apply-templates select='.' mode='custom_template'>
<xsl:with-param name="attribute_name" tunnel="yes">Attribute no. 1</xsl:with-param>
<xsl:with-param name="attribute_value" tunnel="yes"><xsl:value-of select="@attribute1"/></xsl:with-param>
</xsl:apply-templates>
</xsl:when>
<xsl:when test="@attribute2">
<xsl:apply-templates select='.' mode='custom_template'>
<xsl:with-param name="attribute_name" tunnel="yes">Attribute no. 2</xsl:with-param>
<xsl:with-param name="attribute_value" tunnel="yes"><xsl:value-of select="@attribute1"/></xsl:with-param>
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select='.' mode='custom_template'>
<xsl:with-param name="attribute_name" tunnel="yes">Error</xsl:with-param>
<xsl:with-param name="attribute_value" tunnel="yes">No matching attribute </xsl:with-param>
</xsl:apply-templates>
</xsl:otherwise>
</xsl:choose>
Прежде всего, я подозреваю, что это можно решить гораздо лучше. (Я совершенно новичок в XSLT, поэтому, пожалуйста, предложите улучшения и простите раздутый код.)
Теперь на вопрос: как я мог установить параметры на основе этого условного и все еще использовал их в xsl:apply-templates
? Я попытался обернуть весь xsl:choose
стартовым/конечным тегом xsl:apply-templates
, но это, по-видимому, не является законным. Любые подсказки?
+1. Побей меня. ;-) – Tomalak
Спасибо, Тим C! Это кажется лучше. – conciliator