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

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

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

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

   </xsl:variable>                  </xsl:variable>

   <result>                         <result>

    <xsl:copy-of select="$k"/>       <xsl:copy-of select="$k"/>

   </result>                        </result>

  </xsl:if>                        </xsl:if>

 </xsl:template>                  </xsl:template>

 <xsl:variable name="gt">         <xsl:variable name="gt">

  is greater than                  is greater than

 </xsl:variable>                  </xsl:variable>

</xsl:stylesheet>                </xsl:stylesheet>

Π’ XSLT дСйствуСт Ρ‚ΠΎ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования: нСльзя Π΄Π²Π°ΠΆΠ΄Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ с ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ. Однако ΠΈ Ρ‚ΡƒΡ‚ Π΅ΡΡ‚ΡŒ свои особСнности.

β–‘ Π˜ΠΌΠ΅Π½Π° Π΄Π²ΡƒΡ… Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ Π² Ρ‚ΠΎΠΌ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹ΠΉ порядок ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. НапримСр, Ссли ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² Ρ€Π°Π·Π½Ρ‹Ρ… прСобразованиях, ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π½ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ. Π’ этом случаС пСрСмСнная Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°Π΄Π°Π½ΠΎ элСмСнтом xsl:variable со ΡΡ‚Π°Ρ€ΡˆΠΈΠΌ порядком ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°.

β–‘ Π”опускаСтся совпадСниС ΠΈΠΌΠ΅Π½ локальной ΠΈ глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… β€” Π² этом случаС Π² области видимости локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ локальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π² области видимости глобальной (Π½ΠΎ Π½Π΅ локальной) β€” глобальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π˜Π½Ρ‹ΠΌΠΈ словами, Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ "Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚" значСния Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ….

β–‘ Π”Π²Π΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° Π² Ρ‚ΠΎΠΌ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠΌ случаС, Ссли ΠΈΡ… области видимости Π½Π΅ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‚ΡΡ.

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΌΡ‹ ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈ, ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π·Π±ΠΈΡ€Π°Π»ΠΈ порядок ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°: Ρ‚ΠΎΠ³Π΄Π° ΠΌΡ‹ сказали, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ со ΡΡ‚Π°Ρ€ΡˆΠΈΠΌ порядком ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ с младшим порядком ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. Π­Ρ‚ΠΎ довольно Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΎ добавляСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ интСрСсныС возмоТности, Π½ΠΎ ΠΏΡ€ΠΈ этом Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚ΡŒ скрытыС ошибки.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ Π² шаблонС с ΠΈΠΌΠ΅Π½Π΅ΠΌ choice ΠΌΡ‹ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ Π΄Π²Π° элСмСнта input.

Листинг 5.24. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ en.xsl

<xsl:stylesheet

 version="1.0"

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


 <xsl:variable name="submit" select="'Submit'"/>

 <xsl:variable name="reset" select="'Reset'"/>

 <xsl:template name="choice">

  <input type="button" value="{$submit}"/>

  <xsl:text>&#xA;</xsl: text>

  <input type="reset" value="{$reset}"/>

 </xsl:template>

 <xsl:template match="/">

  <xsl:call-template name="choice"/>

 </xsl:template>

</xsl:stylesheet>

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ этого прСобразования Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚:

<input type="button" value="Submit"/>

<input type="reset" value="Reset"/>

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ пСрСвСсти надписи Π½Π° этих ΠΊΠ½ΠΎΠΏΠΊΠ°Ρ… Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ язык достаточно просто ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. НапримСр, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ выполнСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ шаблона.

Листинг 5.25. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ de.xsl

<xsl:stylesheet

 version="1.0"

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

 <xsl:import href="en.xsl"/>

 <xsl:variable name="submit" select="'Senden'"/>

 <xsl:variable name="reset" select="'Loeschen'"/>

</xsl:stylesheet>

Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚, Π½ΠΎ ΡƒΠΆΠ΅ Π½Π° Π½Π΅ΠΌΠ΅Ρ†ΠΊΠΎΠΌ языкС:

<input type="button" value="Senden"/>

<input type="reset" value="Loeschen"/>

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ опасным: Π² случаС, Ссли ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΈΡΡŒ нСзависимо, совпадСниС ΠΈΠΌΠ΅Π½ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ошибкам. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π°ΠΊΠΎΠ΅ Π±Ρ‹Π»ΠΎ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ слСдуСт ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ пространствС ΠΈΠΌΠ΅Π½, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

<xsl:variable name="app:href" select="..."/>

<xsl:variable name="db:href" select="..."/>

Π’ Ρ‚ΠΎΠΌ случаС, Ссли прСфиксы app ΠΈ db (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹) Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Ρ€Π°Π·Π½Ρ‹Π΅ пространства ΠΈΠΌΠ΅Π½, Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ этими двумя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ Ρ‚Π΅ΠΌΠ΅ совпадСний ΠΈΠΌΠ΅Π½ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, продСмонстрируСм "скрытиС" локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ значСния глобальной:

<xsl:stylesheet

 version="1.0"

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


 <xsl:variable name="i" select="1"/>


 <xsl:template match="/">

  <xsl:text>i equals </xsl:text>

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

  <xsl:text>&#xA;</xsl:text>

  <xsl:variable name="i" select="$i + 1"/>

  <xsl:text>i equals </xsl:text>

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

 </xsl:template>

</xsl:stylesheet>

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ выполнСния этого шаблона Π±ΡƒΠ΄Π΅Ρ‚:

i equals 1

i equals 2

Как ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, объявлСниС локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i "скрыло" Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, это ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½ΠΎ Π΅Ρ‰Π΅ ΠΈ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ локальная пСрСмСнная ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ β€” Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΆΠ΅ допускаСтся.

Рассмотрим Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ случай Π΄Π²ΡƒΡ… Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π΄Π²Π΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ β€” ΠΎΠ΄Π½Ρƒ Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ шаблонС:

<xsl:stylesheet

 version="1.0"

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

 <xsl:template match="/">

  <xsl:variable name="i" select="1"/>

  <xsl:text>i equals </xsl:text>

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

  <xsl:text>&#xA;</xsl:text>

  <xsl:variable name="i" select="2"/>

  <xsl:text>i equals </xsl:text>

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

 </xsl:template>

</xsl:stylesheet>

Π’ тСкстС этого шаблона ΠΌΡ‹ Π²Ρ‹Π΄Π΅Π»ΠΈΠ»ΠΈ Π΄Π²Π΅ области видимости Π΄Π²ΡƒΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…: сСрой Π·Π°Π»ΠΈΠ²ΠΊΠΎΠΉ β€” ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈ ΠΏΠΎΠ»ΡƒΠΆΠΈΡ€Π½Ρ‹ΠΌ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ β€” ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ВслСдствиС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ эти области ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‚ΡΡ, шаблон Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ β€” процСссор выдаст сообщСниС ΠΎΠ± ошибкС Π²ΠΈΠ΄Π°:

Failed to compile style sheet

At xsl:variable on line 9 of file stylesheet.xsl:

Variable is already declared in this template

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ элСмСнты xsl:variable ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ Π΄Π²ΡƒΠΌ братским элСмСнтам:

<xsl:stylesheet

 version="1.0"

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

 <xsl:template match="/">

 

   <xsl:variable name="i" select="1"/>

   <xsl:text>i equals </xsl:text>

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

 

 

   <xsl:variable name="i" select="2"/>

   <xsl:text>i equals </xsl:text>

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

 

 </xsl:template>

</xsl:stylesheet>

Π’ этом случаС Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ пСрСсСчСния областСй видимости Π½Π΅Ρ‚, поэтому ΠΈ ошибкой Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΌ шаблонС Π΄Π²ΡƒΡ… Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²ΠΈΠ΄Π°:

 i equals 1

 i equals 2

ИспользованиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ€Π΅Π°ΠΊΡ†ΠΈΠ΅ΠΉ Π½Π° извСстиС ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² XSLT нСльзя ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ являСтся Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°: "Π”Π° Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Ρ‚ΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½Ρ‹?!".

ΠŸΡ€Π΅Ρ‚Π΅Π½Π·ΠΈΡ со стороны ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ³ΠΎ программирования Π²ΠΏΠΎΠ»Π½Π΅ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Π° ΠΈ обоснованна β€” измСняСмыС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ большим ΠΏΠΎΠ΄ΡΠΏΠΎΡ€ΡŒΠ΅ΠΌ Π² слоТных ΠΌΠ½ΠΎΠ³ΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹Ρ… вычислСниях. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π΄Π°ΠΆΠ΅ Π² Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² XSLT, ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹ΠΌ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ элСмСнтом языка. НиТС ΠΌΡ‹ пСрСчислим Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ случаи использования ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

β–‘ ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ значСния Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π· ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ. Π­Ρ‚ΠΎ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ процСссор ΠΎΡ‚ нСобходимости ΠΏΠ΅Ρ€Π΅ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΠΎ-Π½ΠΎΠ²ΠΎΠΌΡƒ.

β–‘ ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ прСобразования, Ρ‡Ρ‚ΠΎ позволяСт ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ сгСнСрированными частями Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°.

β–‘ ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ³ΠΎ доступа ΠΊ внСшним Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ случай использования ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π΅Π½: Ссли Π² ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ слоТноС для вычислСния ΠΈΠ»ΠΈ просто Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΎΠ΅ для записи Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, пСрСмСнная ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ для сохранСния Π΅Π΄ΠΈΠ½ΠΎΠΆΠ΄Ρ‹ вычислСнного Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. НапримСр, Ссли ΠΌΡ‹ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π· обращаСмся ΠΊΠΎ мноТСству ссылок Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° посрСдством выраТСния Π²ΠΈΠ΄Π°:

//a[@href]

Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΡƒΠ΄ΠΎΠ±Π½Π΅ΠΉ ΠΈ экономнСй с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… рСсурсов ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π²ΠΈΠ΄Π°

<xsl:variable name="links" select="//a[@href]"/>

ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π² ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠ°ΠΊ $a. Π€ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΠ΅ выраТСния языка XPath (продукция FilterExpr) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΡƒΠ·Π»Π°ΠΌ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ мноТСства Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ с ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. НапримСр, $a[1] Π±ΡƒΠ΄Π΅Ρ‚ эквивалСнтно //a[@href][1], a $a/@href β€” Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ //a[@href]/@href. ΠŸΡ€ΠΈ этом ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ $a процСссор Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π½ΠΎΠ²ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ всС элСмСнты a с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ href, Ρ‡Ρ‚ΠΎ, ΠΏΠΎ всСй вСроятности, ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ скаТСтся Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.