<xsl:value-of select='1'/>
</xsl:when>
<xsl:otherwise>
<xsl:variable name='temp'>
<xsl:call-template name='factorial'>
<xsl:with-param name='value' select='$value - 1'/>
</xsl:call-template>
</xsl:variable>
<xsl:value-of select='$temp * $value'/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Вот результирующий документ:
<?xml version='1.0' encoding='utf-8'?>
6! = 720
Как видите, это можно сделать, по крайней мере, в XSLT 1.0, в котором разрешены использованные здесь фрагменты результирующего дерева.
Шаблон: значение по умолчанию
Как я говорил ранее, в случае задания параметру значения при объявлении, оно может быть перекрыто, если вы зададите другое значение в элементе <xsl:with-param>
. Но если другого значения не указывать, исходное значение выступит в роли значения по умолчанию.
Следующий пример видоизменяет рассмотренный ранее пример «COLORS». Шаблон имеет параметр COLOR
, но я могу вызвать шаблон, не устанавливая COLOR
в какое-либо определенное значение:
<xsl:template match='PLANET'>
<xsl:if test='NAME='Mercury''>
<xsl:call-template name='COLORS'>
<xsl:with-param name='COLOR' select=''RED''/>
</xsl:call-template>
</xsl:if>
<xsl:if test='NAME='Venus''>
<xsl:call-template name='COLORS'>
<xsl:with-param name='COLOR' select=''GREEN''/>
</xsl:call-template>
</xsl:if>
<xsl:if test='NAME='Earth''>
<xsl:call-template name='COLORS'>
</xsl:call-template>
</xsl:if>
</xsl:template>
В этом случае параметр COLOR
принимает значение по умолчанию«blue
» (голубой), заданное в элементе <xsl:param>
в шаблоне «COLORS»:
<xsl:template match='PLANET'>
<xsl:if test='NAME='Mercury''>
<xsl:call-template name='COLORS'>
<xsl:with-param name='COLOR' select=''RED''/>
</xsl:call-template>
</xsl:if>
<xsl:if test='NAME='Venus''>
<xsl:call-template name='COLORS'>
<xsl:with-param name='COLOR' select=''GREEN''/>
</xsl:call-template>
</xsl:if>
<xsl:if test='NAME='Earth''>
<xsl:call-template name='COLORS'>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name='COLORS'>
<xsl:param name='COLOR' select=''blue''/>
<TR>
<TD>
<FONT COLOR='{$COLOR}'><xsl:value-of select='NAME'/></FONT>
</TD>
<TD>
<FONT COLOR='{$COLOR}'><xsl:apply- templates select='MASS'/></FONT>
</TD>
<TD>
<FONT COLOR='{$COLOR}'><xsl:apply- templates select='RADIUS'/></FONT>
</TD>
<TD>
<FONT COLOR='{$COLOR}'><xsl:apply- templates select='DAY'/></FONT>
</TD>
</TR>
</xsl:template>
Как задавать значения шаблона в командной строке
Кроме возможностей, предоставляемых элементами <xsl:param>
и <xsl:with-param>
, значение параметров таблицы стилей во многих процессорах XSLT можно также задавать в командной строке. Способ зависит от конкретного процессора.
Следующий пример показывает, как можно присвоить параметру param1
значение value1
в командной строке, используя процессор XSLT от Oracle в Windows. Заметьте, что при установке значений параметра в командной строке его все равно нужно объявлять в таблице стилей при помощи <xsl:param>
:
C:>java oraclе.xml.parser.v2.oraxsl -p param1='value1' planets.xml planets.xsl