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

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

Жанры

Технология XSLT

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

Шрифт:

Область видимости параметров определяется в точности так же, как область видимости переменных. Единственным, на что следует обратить здесь внимание — это то, что элементы

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

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

из параметров в любом случае будет следовать за другим.

Элемент xsl:with-param

Синтаксис этого элемента выглядит следующим образом:

<xsl:with-param

 name="имя"

 select="выражение">

 <!-- Содержимое: шаблон -->

</xsl:with-param>

Как можно заметить, элемент

xsl:with-param
абсолютно идентичен элементу
xsl:param
(отличаются только их имена). Практически настолько же похоже и их действие: элемент
xsl:with-param
тоже связывает с именем параметра значение, и при выполнении шаблона это значение будет использоваться вместо значения параметра по умолчанию.

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

□ если в элементе, который вызывает этот шаблон, присутствует элемент

xsl:with-param
, передающий значение этого параметра, в шаблоне будет использоваться переданное значение;

□ если в элементе, который вызывает этот шаблон, элемента

xsl:with-param
, с соответствующим именем нет, в качестве значения параметра будет использоваться значение по умолчанию.

Элемент

xsl:with-param
может использоваться только в качестве дочернего элемента
xsl:apply-templates
и
xsl:call-template
.

В качестве простого примера приведем шаблон, который выводит сокращение названия для недели по его номеру. Номер дня передается в шаблон параметром с именем

day-number
.

Листинг 5.26. Вывод названия дня недели по номеру

<xsl:template name="day-name">

 <xsl:param name="day-number" select="0"/>

 <xsl:choose>

<xsl:when test="$day-number=1">Mon</xsl:when>

<xsl:when test="$day-number=2">Tue</xsl:when>

<xsl:when test="$day-number=3">Wed</xsl:when>

<xsl:when test="$day-number=4">Thu</xsl:when>

<xsl:when test="$day-number=5">Fri</xsl:when>

<xsl:when test="$day-number=6">Sat</xsl:when>

<xsl:when test="$day-number=7">Sun</xsl:when>

<xsl:otherwise>Hmm...</xsl:otherwise>

 </xsl:choose>

</xsl:template>

Результатом вызова:

<xsl:call-template name="day-name">

 <xsl:with-param name="day-number" select="1"/>

</xsl:call-template>

будет

текстовый узел "
Mon
". Рассмотрим теперь случай, когда параметра передано не было:

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

Шаблон выведет задумчивое

Hmm...
, поскольку значение параметра
day-number
будет по умолчанию нулем (атрибут
select
имеет вид
select="0"
) и в операторе выбора
xsl:choose
сработает условие
xsl:otherwise
.

Параметры могут быть использованы как в именованных, так и в неименованных шаблонах. Именованные шаблоны с параметрами ведут себя как самые настоящие функции — они могут вызываться с определенными параметрами вне зависимости от контекста, только чтобы выполнить какие-либо действия с переданными значениями. В случае обычных, неименованных шаблонов параметры могут предоставлять некую дополнительную информацию.

Пример

Представим себе описание меню в следующем формате:

<menu>

 <menuitem index="1" name="Home" href="#"/>

 <menuitem index="2" name="News" href="#"/>

 <menuitem index="3" name="Profile" href="#"/>

 <menuitem index="4" name="Contact" href="#"/>

</menu>

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

current
и будем выводить название страницы в элементе
b
(от англ. bold — полужирный), если значение
current
равно индексу данного пункта меню; если текущая страница и индекс пункта меню не совпадают, то выводиться будет ссылка.

<xsl:template match="menuitem">

 <xsl:param name="current" select="1"/>

 <xsl:choose>

<xsl:when test="$current=@index">

<b>

<xsl:value-of select="@name"/>

</b>

</xsl:when>

<xsl:otherwise>

<a href="#">

<xsl:value-of select="@name"/>

</a>

</xsl:otherwise>

 </xsl:choose>

</xsl:template>

Результатом выполнения шаблона

<xsl:template match="menu">

 <xsl:apply-templates select="menuitem">

<xsl:with-param name="current" select="3"/>

 </xsl:apply-templates>

</xsl:template>

будет фрагмент меню вида

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

На границе империй. Том 3

INDIGO
3. Фортуна дама переменчивая
Фантастика:
космическая фантастика
5.63
рейтинг книги
На границе империй. Том 3

(Не) моя ДНК

Рымарь Диана
6. Сапфировые истории
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
(Не) моя ДНК

Измена. Избранная для дракона

Солт Елена
Любовные романы:
любовно-фантастические романы
3.40
рейтинг книги
Измена. Избранная для дракона

Блуждающие огни

Панченко Андрей Алексеевич
1. Блуждающие огни
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Блуждающие огни

Архонт

Прокофьев Роман Юрьевич
5. Стеллар
Фантастика:
боевая фантастика
рпг
7.80
рейтинг книги
Архонт

Ваше Сиятельство 11

Моури Эрли
11. Ваше Сиятельство
Фантастика:
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Ваше Сиятельство 11

Мама из другого мира. Делу - время, забавам - час

Рыжая Ехидна
2. Королевский приют имени графа Тадеуса Оберона
Фантастика:
фэнтези
8.83
рейтинг книги
Мама из другого мира. Делу - время, забавам - час

Черный Маг Императора 6

Герда Александр
6. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
7.00
рейтинг книги
Черный Маг Императора 6

Пятничная я. Умереть, чтобы жить

Это Хорошо
Фантастика:
детективная фантастика
6.25
рейтинг книги
Пятничная я. Умереть, чтобы жить

Барон Дубов 2

Карелин Сергей Витальевич
2. Его Дубейшество
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Барон Дубов 2

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

Винокуров Юрий
7. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
4.75
рейтинг книги
Кодекс Охотника. Книга VII

Контролер

Семин Никита
3. Переломный век
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Контролер

Ох уж этот Мин Джин Хо 4

Кронос Александр
4. Мин Джин Хо
Фантастика:
попаданцы
дорама
5.00
рейтинг книги
Ох уж этот Мин Джин Хо 4

Измена. Вторая жена мужа

Караева Алсу
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Вторая жена мужа