Чтение онлайн

на главную - закладки

Жанры

Технология XSLT

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

Шрифт:

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

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"

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

Месть бывшему. Замуж за босса

Россиус Анна
3. Власть. Страсть. Любовь
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Месть бывшему. Замуж за босса

Кодекс Крови. Книга IV

Борзых М.
4. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга IV

Солнечный корт

Сакавич Нора
4. Все ради игры
Фантастика:
зарубежная фантастика
5.00
рейтинг книги
Солнечный корт

Темный Лекарь 4

Токсик Саша
4. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь 4

Таня Гроттер и Исчезающий Этаж

Емец Дмитрий Александрович
2. Таня Гроттер
Фантастика:
фэнтези
8.82
рейтинг книги
Таня Гроттер и Исчезающий Этаж

Прометей: каменный век II

Рави Ивар
2. Прометей
Фантастика:
альтернативная история
7.40
рейтинг книги
Прометей: каменный век II

Камень. Книга восьмая

Минин Станислав
8. Камень
Фантастика:
фэнтези
боевая фантастика
7.00
рейтинг книги
Камень. Книга восьмая

Кодекс Крови. Книга ХVI

Борзых М.
16. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХVI

Кодекс Охотника. Книга XV

Винокуров Юрий
15. Кодекс Охотника
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XV

Последняя Арена 11

Греков Сергей
11. Последняя Арена
Фантастика:
фэнтези
боевая фантастика
рпг
5.00
рейтинг книги
Последняя Арена 11

Хорошая девочка

Кистяева Марина
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Хорошая девочка

Диверсант. Дилогия

Корчевский Юрий Григорьевич
Фантастика:
альтернативная история
8.17
рейтинг книги
Диверсант. Дилогия

Старая дева

Брэйн Даниэль
2. Ваш выход, маэстро!
Фантастика:
фэнтези
5.00
рейтинг книги
Старая дева

Вонгозеро

Вагнер Яна
1. Вонгозеро
Детективы:
триллеры
9.19
рейтинг книги
Вонгозеро