j

<xsl:stylesheet                  <xsl:stylesheet

 version='1.0' xmlns:xsl='... '>  version='1.0' xmlns:xsl='... '>

 <xsl:template match='/'>         <xsl:template match='/'>

  <xsl:variable name='i'           <xsl:variable name='i'

   select='2'/>                     select='2'/>

  <xsl:variable name='j'           <xsl:variable name='j'

   select='$i - 1'/>                select='$i - 1'/>

  <xsl:if test='$i > $j'>          <xsl:if test='$i > $j'>

   <xsl:variable name='k'>          <xsl:variable name='k'>

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

    <xsl:value-of select='$gt'/>     <xsl:value-of select='$gt'/>

    <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>

Область видимости переменной k               Область видимости переменной gt

<xsl:stylesheet                  <xsl:stylesheet

 version='1.0' xmlns:xsl='... '>  version='1.0' xmlns:xsl='... '>

 <xsl:template match='/'>         <xsl:template match='/'>

  <xsl:variable name='i'           <xsl:variable name='i'

   select='2'/>                     select='2'/>

  <xsl:variable name='j'           <xsl:variable name='j'

   select='$i - 1'/>                select='$i - 1'/>

  <xsl:if test='$i > $j'>          <xsl:if test='$i > $j'>

   <xsl:variable name='k'>          <xsl:variable name='k'>

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

    <xsl:value-of select='$gt'/>     <xsl:value-of select='$gt'/>

    <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''/>

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

0

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

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