Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ВСхнология XSLTΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 104

Автор АлСксСй Π’Π°Π»ΠΈΠΊΠΎΠ²

 int result = 1;

 while (i != 0) {

  result = result * i;

  i--;

 }

 return result;

}

Π’ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ условиСм являСтся ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i ΠΎΡ‚ 0, Π° дСйствиями β€” ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ result Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i, ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ значСния этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π° 1.

Π¦ΠΈΠΊΠ» while Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ Π² XSLT ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ ΠΊΠ°ΠΊ дСйствия, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π² контСкстС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… вычисляСтся условиС, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π΅, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π° ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Π”Π°Π΄ΠΈΠΌ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΎΠ±Ρ‰ΡƒΡŽ запись Ρ†ΠΈΠΊΠ»Π° while, Π²Ρ‹Π΄Π΅Π»ΠΈΠ² ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…:

ΠΏΠΎΠΊΠ°

 Π²Π΅Ρ€Π½ΠΎ условиС(x1,x2, ...,xn)

Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ

 x1' := функция1(x1,x2,...,xn)

 Ρ…2' := функция2(x1,x2,...,xn)

 ...

 xn' := функцияn(x1,x2,...,xn)

 Π΄Π΅ΠΉΡΡ‚вия(x1,x2,...,Ρ…n)

 x1 := x1'

 x2 := x2'

 ...

 xn := xn'

ΠΈΠ½Π°Ρ‡Π΅

 Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚(x1,...,Ρ…n)

ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… x1, … , Ρ…n Π² этом случаС Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ n Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ: функция1 …, функцияn. И Ссли ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ связанноС с Π½Π΅ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΡ‹ Π²ΠΏΠΎΠ»Π½Π΅ Π² состоянии, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π² контСкст Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ вСсь Ρ†ΠΈΠΊΠ» while ΠΊΠ°ΠΊ ΠΎΠ΄Π½Ρƒ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ:

while(x1, ..., xn) ::=

 Π΅ΡΠ»ΠΈ

  выполняСтся условиС(x1, ..., xn)

 Ρ‚ΠΎ

  дСйствия(x1, ..., Ρ…n)

  while(функция1(x1, ..., Ρ…n),

   функция2(x1, ..., Ρ…n),

   ...,

   функцияn(x1, ..., xn))

 ΠΈΠ½Π°Ρ‡Π΅

  Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚(x1, ..., Ρ…n)

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΆΠ΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, ΠΊΠ°ΠΊ while-Ρ†ΠΈΠΊΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π² ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ.

Листинг 11.10. Π¨Π°Π±Π»ΠΎΠ½ Ρ†ΠΈΠΊΠ»Π° while Π² ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅

<xsl:template name="while">

 <xsl:param name="x1"/>

 <!-- ... -->

 <xsl:param name="xn"/>

 <xsl:choose>

  <xsl:when test="условиС($x1,...,$xn)">

   <!-- ДСйствия -->

   <xsl:call-template name="while">

    <xsl:with-param name="x1" select="функция_1($x1, ... $xn) "/>

    <!-- ... -->

    <xsl:with-param name="xn" select="функция_n($x1, ... $xn) "/>

   </xsl:call-template>

  </xsl:when>

  <xsl:otherwise>

   <xsl:value-of select="Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚($x1, ..., $xn)"/>

  </xsl:otherwise>

 </xsl:choose>

</xsl:template>

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ while-Ρ†ΠΈΠΊΠ» для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰Π΅ΠΉ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π». Java-ΠΊΠΎΠ΄ Π±Ρ‹Π» ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:

while (i != 0) {

 result = result * i;

 i--;

}

Π’ этом Ρ†ΠΈΠΊΠ»Π΅ ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ β€” i ΠΈ result. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ Π² этом Ρ†ΠΈΠΊΠ»Π΅, Π·Π°ΠΏΠΈΡˆΡƒΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

условиС($1, $result)      ::= ($i != 0)

функцияi($i, $result)     ::= ($i - 1)

функцияresult($i, $result) ::= ($i * $result)

Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚($I, $result)    ::= ($result)

Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ шаблон для этого случая Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄.

Листинг 11.11. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ шаблона Ρ†ΠΈΠΊΠ»Π° while

<xsl:template name="while">

 <xsl:param name="i"/>

 <xsl:param name="result"/>

 <xsl:choose>

  <xsl:when test="$i != 0">

   <xsl:call-template name="while">

    <xsl:with-param name="i" select="$i β€” 1"/>

    <xsl:with-param name="result" select="$result * $i"/>

   </xsl:call-template>

  </xsl:when>

  <xsl:otherwise>

   <xsl:value-of select="$result"/>

  </xsl:otherwise>

 </xsl:choose>

</xsl:template>

Π’Ρ‹Π·Π²Π°Ρ‚ΡŒ этот шаблон ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

<xsl:template match="/">

 <xsl:call-template name="while">

  <xsl:with-param name="i" select="6"/>

  <xsl:with-param name="result" select="1"/>

 </xsl:call-template>

</xsl:template>

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚, СстСствСнно, число 720.

Π¦ΠΈΠΊΠ» for

Частным случаСм Ρ†ΠΈΠΊΠ»Π° while являСтся Ρ†ΠΈΠΊΠ» for. Π’ Ρ€Π°Π·Π½Ρ‹Ρ… языках программирования for ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΡƒΡŽ сСмантику; ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ»Ρ‹ for Π²ΠΈΠ΄Π°

for (int i = 0; i < n; i++) { ... }

Π² языках Java ΠΈ Π‘ ΠΈΠ»ΠΈ

for i := 0 to n-1 do begin ... end;

Π² Pascal. Π˜Π½Ρ‹ΠΌΠΈ словами, нас Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ цикличСскоС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… дСйствий ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ значСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΈΠ½ΠΎΠ³Π΄Π° индСксом Ρ†ΠΈΠΊΠ»Π°) Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ Ρ†Π΅Π»Ρ‹Ρ… чисСл ΠΎΡ‚ 0 Π΄ΠΎ n Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ.

Π¦ΠΈΠΊΠ» for ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Ρ‡Π΅Ρ€Π΅Π· while с использованиСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… условных ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

условиС($i, $n,$x1,...,$Ρ…k)      :: = ($i < $n)

функцияi($i, $n, $x1, ... , $xk) ::= ($i + 1)

функцияn($i, $n, $x1, ..., $xk)  :: = ($n)

Π¨Π°Π±Π»ΠΎΠ½ Ρ†ΠΈΠΊΠ»Π° for Π² ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ.

Листинг 11.12. Π¨Π°Π±Π»ΠΎΠ½ Ρ†ΠΈΠΊΠ»Π° for Π² ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅

<xsl:template name="for">

 <xsl:param name="i" select="0"/>

 <xsl:param name="n"/>

 <!-- Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ -->

 <xsl:param name="x1"/>

 <!-- ... -->

 <xsl:param name="xk"/>

 <xsl:choose>

  <xsl:when test="$i &lt; $n">

   <!-- ДСйствия -->

   <xsl:call-template name="for">

    <xsl:with-param name="i" select="$i + 1"/>

    <xsl:with-param name="n" select="$n"/>

    <!-- Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ -->

    <xsl:with-param" name="x1" select функция1($i, $n, $x1, ..., $xk) "/>

    <!-- ... -->

    <xsl:with-param name="xk" select="функцияk($i, $n, $x1, ..., $xk)"/>

   </xsl:call-template>

  </xsl:when>

  <xsl:otherwise>

   <xsl:value-of select="Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚($i,$n,$x1,...,$xk)"/>

  </xsl:otherwise>

 </xsl:choose>

</xsl:template>

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Ρ†ΠΈΠΊΠ»Π° for ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ шаблон, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰ΠΈΠΉ n ΠΏΠ΅Ρ€Π²Ρ‹Ρ… чисСл Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ.

Числа Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ β€” это рСкуррСнтная ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²ΠΈΠ΄Π°

1 1 2 3 5 8 13 21 ...

ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ число опрСдСляСтся ΠΊΠ°ΠΊ сумма Π΄Π²ΡƒΡ… ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ….

Для вычислСния n ΠΏΠ΅Ρ€Π²Ρ‹Ρ… чисСл Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ current ΠΈ last, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ число ΠΈ числу, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΌΡƒ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ шагС соотвСтствСнно. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ эти ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹:

функцияlast($i, $n, $last, $current)   ::= ($current)

функцияcurrent($i, $n, $last, $current) ::= ($current + $last)

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π½ΡƒΠΆΠ½ΠΎ лишь цикличСски Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ΅ число Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ, шаблон for ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ использованиСм элСмСнта xsl:if вмСсто xsl:choose.

Листинг 11.13. Π¨Π°Π±Π»ΠΎΠ½, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰ΠΈΠΉ числа Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ

<xsl:template name="for">

 <xsl:param name="i" select="0"/>

 <xsl:param name="n"/>

 <xsl:param name="last" select="0"/>

 <xsl:param name="current" select="1"/>

 <xsl:if test="$i &lt; $n">

  <xsl:text> </xsl:text>

  <xsl:value-of select="$current"/>

  <xsl:call-template name="for">

   <xsl:with-param name="i" select="$i + 1"/>

   <xsl:with-param name="n" select="$n"/>

   <xsl:with-param name="last" select="$current"/>

   <xsl:with-param name="current" select="$last + $current"/>

  </xsl:call-template>

 </xsl:if>

/xsl:template>

Π’Ρ‹Π·Π²Π°Π½Π½Ρ‹ΠΉ Π² основном шаблонС ΠΊΠ°ΠΊ:

<xsl:template match="/">

 <xsl:call-template name="for">

  <xsl:with-param name="n" select="6"/>

 </xsl:call-template>

</xsl:template>

этот шаблон создаст Π² выходящСм Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ:

1 1 2 3 5 8

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ элСмСнт option выводится Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ число Ρ€Π°Π·.

Листинг 11.14. Π’Ρ‹Π²ΠΎΠ΄ 10 элСмСнтов option

<xsl:stylesheet

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform'">


 <xsl:template match="/">

  <xsl:call-template name="for">

   <xsl:with-param name="n" select="10"/>

  </xsl:call-template>

 </xsl:template>


 <xsl:template name="for">

  <xsl:param name="i" select="0"/>

  <xsl:param name="n"/>