Вход/Регистрация
Технология XSLT
вернуться

Валиков Алексей Н.

Шрифт:

□ Локальную переменную можно использовать только после ее объявления и только в том же родительском элементе, которому принадлежит объявляющий элемент

xsl:variable
. В терминах XPath область видимости локальной переменной будет определяться выражением

following-sibling:node/descendant-or-self:node
.

Для того чтобы до конца прояснить ситуацию, приведем несколько примеров.

Предположим, что мы определяем переменную с именем

ID
и значением
4
следующим образом:

<xsl:stylesheet

 version="1.0"

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

 ...

 <xsl:variable name="ID" select="4"/>

 ...

</xsl:stylesheet>

Несложно видеть, что здесь мы определили глобальную переменную, а значит, ее значение можно использовать в преобразовании в любом месте. Например, мы можем определить через нее другие глобальные переменные, либо использовать в шаблоне:

<xsl:stylesheet

 version="1.0"

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

 ...

 <xsl:variable name="leaf" select="//item[@id=$ID]"/>

 <xsl:variable name="ID" select="4"/>

 <xsl:variable name="path" select="$leaf/ancestor-or-self::item"/>

 ...

</xsl:stylesheet>

Причем, как уже было сказано, глобальная переменная может быть использована и до объявления: в нашем случае переменная

leaf
определяется через переменную
ID
, a
path
— через
leaf
. Конечно же, не следует забывать и то правило, что переменные не могут объявляться посредством самих себя, явно или неявно. Очевидно, что объявление:

<xsl:variable name="ID" select="$ID - 1"/>

было бы некорректным ввиду явного использования переменной при собственном определении. Точно так же были бы некорректны определения:

<xsl:variable name="ID" select="$id — 1/>

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

поскольку переменная

ID
определяется через переменную
id
, которая определяется через переменную
ID
и так до бесконечности.

Дела с локальными переменными обстоят чуть-чуть сложнее. Для того чтобы объяснить, что же такое область видимости, обратимся к следующему преобразованию.

Листинг 5.22. Преобразование, использующее переменные i, j, k и gt

<xsl:stylesheet

 version="1.0"

 xmlns:xsl="... ">

 <xsl:template match="/">

<xsl:variable

name="i"

select="2"/>

<xsl:variable

name="j"

select="$i - 1"/>

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

<xsl:variable name="k">

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

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

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

</xsl:variable>

<result>

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

</result>

</xsl:if>

 </xsl:template>

 <xsl:variable name="gt">

is greater than

 </xsl:variable>

</xsl:stylesheet>

В этом преобразовании определены три локальные переменные —

i
,
j
и
k
и одна глобальная переменная —
gt
. На следующих четырех листингах мы выделим серой заливкой область видимости переменной (то есть область, где ее можно использовать), а само определение переменной отметим полужирным шрифтом.

Листинг 5.23. Области видимости переменных i, j, k и gt

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

i
Область видимости переменной
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"

  • Читать дальше
  • 1
  • ...
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: