Я хотел бы применить шаблон с другими параметрами, основанными на результате условия. Примерно так:
<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
, но это, очевидно, не разрешено законом. Любые подсказки?