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

на главную

Жанры

Холзнер Стивен

Шрифт:

Аналогично

<xsl:variable>
, этот элемент может либо быть элементом высокого уровня, либо применяться внутри тела шаблона. Параметры, созданные элементами
<xsl:param>
, являются глобальными, а созданные внутри шаблонов — локальными. При создании параметра внутри тела шаблона, элемент
<xsl:param>
должен быть расположен перед какими-либо другими дочерними элементами. Элемент может также содержать необязательное тело шаблона, создающее фрагмент результирующего дерева — в XSLT 1.1 это уже не разрешено. Если элемент содержит тело, атрибут
select
использовать нельзя.

После объявления параметра при помощи

<xsl:param>
к его значению можно обращаться в шаблоне таким же способом, как и к значению переменной, — добавляя к имени префикс «$».

Когда вы вызываете именованный шаблон при помощи

<xsl:call-template>
или применяете шаблоны с использованием
<xsl:apply-templates>
, вы можете задать значение используемых в шаблоне параметров с помощью элемента
<xsl:with-param>
. Если самому параметру при объявлении было присвоено значение атрибутом
select
элемента
<xsl:param>
, это значение выступает в качестве значения параметра по умолчанию. Значение по умолчанию будет перекрыто, если вы зададите новое значение параметра при помощи элемента
<xsl:with-param>
. У элемента
<xsl:with-param>
два атрибута:

• 

name
(обязательный). Имя переменной; устанавливается в QName;

• 

select
(необязательный). Выражение XPath, задающее значение параметра. Если опустить этот атрибут, значение переменной будет определяться содержимым
<xsl:with-param>
.

Элемент может также содержать необязательное тело шаблона, создающее фрагмент результирующего дерева, но в XSLT 1.1 это уже не разрешено.

В следующем примере (листинг 9.3) я создаю именованный шаблон с именем «COLORS» (цвета), добавляющий цвет в данные планет в результирующем HTML-документе. Этот именованный шаблон использует единственный параметр,

COLOR
, который устанавливается в требуемый цвет. В примере я устанавливаю параметр
COLOR
в разные цвета для разных планет, используя
<xsl:with-param>
и вызывая шаблон «COLORS». Вот как это реализуется на практике.

Листинг 9.3. Применение параметров таблиц стилей

<xsl:stylesheet version="1.1"

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

 <xsl:template match="/PLANETS">

<HTML>

.

.

.

</HTML>

 </xsl:template>

 <xsl:template match="PLANET">

<xsl:if test="NAME='Mercury'">

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

<xsl:with-param name="COLOR" select="'RED'"/>

</xsl:call-template>

</xsl:if>

<xsl:if test="NAME='Venus'">

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

<xsl:with-param name="COLOR" select="'GREEN'"/>

</xsl:call-template>

</xsl:if>

<xsl:if test="NAME='Earth'">

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

<xsl:with-param name="COLOR" select="'BLUE'"/>

</xsl:call-template>

</xsl:if>

 </xsl:template>

 .

 .

 .

Данная

таблица вызывает шаблон «COLORS» с разными значениями параметра COLOR. Я могу воспользоваться этими цветами при форматировании данных планет. Заметьте, что я объявил параметр COLOR при помощи
<xsl:param>
в самом начале шаблона «COLORS»:

<xsl:stylesheet version="1.1"

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

 <xsl:template match="/PLANETS">

<HTML>

.

.

.

</HTML>

 </xsl:template>

 <xsl:template match="PLANET">

<xsl:if test="NAME='Mercury'">

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

<xsl:with-param name="COLOR" select="'RED'"/>

</xsl:call-template>

</xsl:if>

<xsl:if test="NAME='Venus'">

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

<xsl:with-param name="COLOR" select="'GREEN'"/>

</xsl:call-template>

</xsl:if>

<xsl:if test="NAME='Earth'">

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

<xsl:with-param name="COLOR" select="'BLUE'"/>

</xsl:call-template>

</xsl:if>

 </xsl:template>

 <xsl:template name="COLORS"> <xsl:param name="COLOR"/>

<TR>

<TD>

<FONT COLOR="{$COLOR}"><xsl:value-of select="NAME"/></FONT>

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

Восход. Солнцев. Книга X

Скабер Артемий
10. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга X

Мастер 7

Чащин Валерий
7. Мастер
Фантастика:
фэнтези
боевая фантастика
попаданцы
технофэнтези
аниме
5.00
рейтинг книги
Мастер 7

Неудержимый. Книга XIV

Боярский Андрей
14. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XIV

Все не случайно

Юнина Наталья
Любовные романы:
современные любовные романы
7.10
рейтинг книги
Все не случайно

Гром над Тверью

Машуков Тимур
1. Гром над миром
Фантастика:
боевая фантастика
5.89
рейтинг книги
Гром над Тверью

Идущий в тени 5

Амврелий Марк
5. Идущий в тени
Фантастика:
фэнтези
рпг
5.50
рейтинг книги
Идущий в тени 5

Кровь, золото и помидоры

Распопов Дмитрий Викторович
4. Венецианский купец
Фантастика:
альтернативная история
5.40
рейтинг книги
Кровь, золото и помидоры

Неудержимый. Книга VIII

Боярский Андрей
8. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
6.00
рейтинг книги
Неудержимый. Книга VIII

Чужое наследие

Кораблев Родион
3. Другая сторона
Фантастика:
боевая фантастика
8.47
рейтинг книги
Чужое наследие

Пистоль и шпага

Дроздов Анатолий Федорович
2. Штуцер и тесак
Фантастика:
альтернативная история
8.28
рейтинг книги
Пистоль и шпага

Мастер 4

Чащин Валерий
4. Мастер
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Мастер 4

Темный Патриарх Светлого Рода 6

Лисицин Евгений
6. Темный Патриарх Светлого Рода
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода 6

Лорд Системы 14

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

Падение Твердыни

Распопов Дмитрий Викторович
6. Венецианский купец
Фантастика:
попаданцы
альтернативная история
5.33
рейтинг книги
Падение Твердыни