XSLT
Шрифт:
<xsl:variable name="movie" select="'Mr. Blandings Builds His Dream House'"/>
<!-- здесь $movie = "Mr Blandings Builds His Dream House'-->
<xsl:template match="entertainment">
<!-- здесь $movie = 'Mr. Blandings Builds His Dream House'-->
.
.
.
Однако если вы объявите локальную переменную movie, в шаблоне эта версия перекроет глобальную переменную:
<xsl:variable name="movie" select="'Mr. Blandings Builds His Dream House'">
<!-- здесь $movie = 'Mr. Blandings Builds His Dream House'-->
<xsl:template match="entertainment">
<!-- здесь $movie = Mr. Blandings Builds His Dream House"-->
<xsl:variable name="movie" select="'Goldfinger'"/>
<!-- здесь $movie = 'Goldfinger'-->
.
.
.
В этом случае мы перекрыли глобальную переменную при помощи глобальной. Заметьте, однако, что нельзя снова объявить одну и ту же переменную в одном шаблоне с целью попытаться изменить ее значение:
<xsl:variable name="movie" select="'Mr. Blandings Builds His Dream House'"/>
<!-- здесь $movie = Mr. Blandings Builds His Dream House"-->
<xsl:template match="entertainment">
<!-- здесь $movie = 'Mr. Blandings Builds His Dream House"-->
<xsl:variable name="movie" select="'Goldfinger'"/>
<!-- здесь $movie = 'Goldfinger'-->
<xsl:variable name="movie" select="'Withnail and I'"/><!-- Запрещено -->
.
.
.
За пределами шаблона локальная переменная невидима, и
movie
содержит глобальное значение: <xsl:variable name="movie" select="'Mr. Blandings Builds His Dream House'"/>
<!-- здесь $movie = 'Mr Bindings Builds His Dream House' -->
<xsl:template match="entertainment">
<!-- здесь $movie = 'Mr. Blandings Builds His Dream House'-->
<xsl:variable name="movie" select="'Goldfinger'"/>
<!-- здесь $movie = 'Goldfinger'-->
<xsl:variable name="movie" select="'Withnail and I'"/><!-- Запрещено -->
</xsl:template>
<!-- здесь $movie = 'Mr. Blandings Builds His Dream House'-->
.
.
.
Глобальные переменные тоже нельзя объявлять повторно:
<xsl:variable name="movie" select="'Mr. Blandings Builds His Dream House'"/>
<!-- здесь $movie = 'Mr. Blandings Builds His Dream House'-->
<xsl:template match="entertainment">
<!-- здесь $movie = 'Mr. Blandings Builds His Dream House"-->
<xsl:variable name="movie" select="'Goldfinger'"/>
<!-- здесь $movie = 'Goldfinger'-->
<xsl:variable name="movie" select="'Withnail and I'"/><!-- Запрещено -->
</xsl:template>
<!-- здесь $movie = 'Mr. Blandings Builds His Dream House'-->
<xsl:variable name="movie" select="'Goldfinger'"/><!-- Запрещено -->
Несмотря на все эти ограничения, вы можете менять значение переменной на каждом шаге цикла
<xsl:for-each>
, как мы увидим в следующем разделе. Работа с переменными
Давайте рассмотрим примеры применения переменных. В следующем примере (листинг 9.1) я присваиваю переменной
copyright
сообщение об авторских правах и затем с ее помощью добавляю атрибут copyright
во все элементы planets.xml
. Листинг 9.1. Применение переменной
<?xml version="1.0"?>
<xsl:stylesheet version="1.1"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:variable name="copyright" select="'(c)2002 Starpowder Inc.'"/>
<xsl:template match="*">
<xsl:copy>
<xsl:attribute name="copyright">
<xsl:value-of select="$copyright"/>
</xsl:attribute>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Вот результирующий документ, дополненный атрибутами copyright
<?xml version="1.0" encoding="utf-8"?>
<PLANETS copyright="(c)2002 Starpowder Inc.">
Поделиться:
Популярные книги
Старый, но крепкий 4
4. Культивация без насилия
Фантастика:
уся
фэнтези
5.00
рейтинг книги
Пышка (сборник)
Проза:
классическая проза
8.45
рейтинг книги
Форма жизни
Фантастика:
боевая фантастика
киберпанк
7.62
рейтинг книги
Закрытые Миры
Вселенная EVE Online
Фантастика:
фэнтези
5.86
рейтинг книги
Эмиссар
8. Ушедший Род
Фантастика:
боевая фантастика
аниме
попаданцы
7.50
рейтинг книги
Кодекс Крови. Книга II
2. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый VI
6. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наследие Маозари 6
6. Наследие Маозари
Фантастика:
попаданцы
постапокалипсис
рпг
фэнтези
эпическая фантастика
5.50
рейтинг книги
Я еще граф. Книга #8
8. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Развод в 45. От любви до ненависти
6. Развод
Любовные романы:
остросюжетные любовные романы
5.40
рейтинг книги
Кодекс Охотника. Книга II
2. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
боевая фантастика
юмористическое фэнтези
5.00
рейтинг книги
Контрольный поцелуй
8. Любительница частного сыска Даша Васильева
Детективы:
иронические детективы
9.15
рейтинг книги
Неучтенный элемент. Том 10
10. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Полонянин
2. Ночь Сварога
Приключения:
исторические приключения
8.30