<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

Вы читаете XSLT
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату