=> Главная База Знаний Xslt Элемент <xsl:variable>: создание переменных


Элемент <xsl:variable>: создание переменных

Элемент <xsl:variable>: создание переменных

Для создания переменных в XSLT служит элемент

<xsl:variable>
, обладающий следующими атрибутами:

• 

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

• 

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

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

select
.

Для создания переменной присвойте ее имя атрибуту name элемента

<xsl:variable>
, а значение переменной атрибуту
select
, как в следующем примере, в котором я создаю переменную
number_books
и сохраняю в ней значение 255: 

<xsl:variable name="number_books" select="255"/>

.

.

.

Получить значение переменной можно, добавив к ее имени префикс $:

<xsl:variable name="number=books" select="255"/>

<xsl:text>There are </xsl:text>

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

<xsl:text> books in my library </xsl:text>

Заметьте, что если вы присваиваете переменной литерал — как, например, присваивание значения «turkey» (индейка) переменной

sandwich
(бутерброд), — литерал необходимо заключить в кавычки, причем они должны отличаться от кавычек, в которые заключены значения атрибутов:

<xsl:variable name="sandwich" select="'turkey'"/>

В XSLT 1.0 нет необходимости в атрибуте select — данные можно заключить внутри самого элемента

<xsl:variable>
:

<xsl:variable name="sandwich">turkey</xsl:variable>

Формально, однако, при пропуске атрибута

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

Стоит отметить, что имя переменной может включать префикс, как, например,

star:PLANET
, который должен соответствовать активному пространству имен. Сравнения осуществляются не сравнением префиксов, а проверкой фактического URI префикса — поэтому
star:PLANET
может быть тем же самым, что и
nebula:PLANET
, если пространства имен
star
и
nebula
соответствуют одному и тому же URI.