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

на главную

Жанры

Технология XSLT

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

Шрифт:

link</A>.</B>

 </body>

</result>

Это преобразование легко понять, если обратиться к рис. 3.18.

Рис. 3.18. Генерация выходящего дерева с использованием переменных

Переменной

href
присваивается дерево, содержащее результат обработки элемента
href
, находящегося в корне входящего документа. Затем переменная
href
дважды используется в результирующем документе:
один раз как строка, принадлежащая текстовому узлу, и один раз как результирующий фрагмент дерева.

Дерево может быть преобразовано в булевое значение, число или строку. Некоторые процессоры позволяют также преобразовывать дерево во множество узлов, которое содержит единственный элемент — корневой узел этого дерева. Такие возможности бывают весьма полезными, но не являются, к сожалению, стандартными в текущей версии языка.

При преобразовании результирующего фрагмента дерева в булевое значение результатом всегда будет true, поскольку дерево никогда не бывает "пустым" — в нем всегда присутствует корневой узел.

При преобразовании дерева в строку результатом является конкатенация (строковое сложение) всех текстовых узлов дерева в порядке просмотра.

Пример

Результирующий фрагмент дерева

<body>

<B>You may visit the <A href="#">following

link</A>.</B>

</body>

приводится к строке

The result is: You may visit the following link.

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

Пример
Листинг 3.13. Входящий документ:

<numbers>

 <integer>1</integer>

 <real>1</real>

 <integer>2</integer>

 <real>2</real>

 <integer>3</integer>

 <real>3.5</real>

</numbers>

Листинг 3.14. Преобразование:

<xsl:stylesheet

 version="1.0"

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

 <xsl:variable name="integers">

<integers><xsl:copy-of select="/numbers/integer"/></integers>

 </xsl:variable>

 <xsl:variable name="reals">

<reals><xsl:copy-of select="/numbers/real"/></reals>

 </xsl:variable>

 <xsl:template match="/">

<result>

<xsl:text>&#xA; Integers:&#xA;</xsl:text>

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

<xsl:text>&#xA;Reals:&#xA;</xsl:text>

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

<xsl:text>&#xA;Reals minus integers:&#xA;</xsl:text>

<xsl:value-of select="$reals - $integers"/>

<xsl:text>&#xA;</xsl:text>

</result>

 </xsl:template>

</xsl:stylesheet>

Листинг 3.15.
Результат

<result>

Integers:

123

Reals:

123.5

Reals minus integers:

0.5

</result>

Таблица преобразования типов

Для удобства использования все взаимные преобразования типов сведены в одну таблицу (табл. 3.2).

Таблица 3.2. Взаимные преобразования типов данных XSLT

Преобразовываемый тип
Целевой тип
boolean
(булевое значение)
number
(число)
string
(строка)
node-set
(множество узлов)
tree
(дерево)
boolean
(булевое значение)
 false NaN 
→ 
false
другое → 
true
пустая → 
false
непустая → 
true
пустое → 
false
другое → 
true
всегда
true
number
(число)
false
0 true
1
разбирается, как число в десятичном формате мн-во → строка → число дерево → строка → число
string
(строка)
false 
→ 
"false" true 
→ 
"true"
десятичная запись числа строковое значение первого узла в порядке просмотра строковое сложение всех текстовых узлов дерева
node-set
(множество узлов)
нет нет нет нет
tree
(дерево)
нет нет нет нет

Переменные

Несмотря на отсутствие побочных эффектов, которое является одним из основных принципов XSLT, в преобразованиях можно использовать переменные. Переменная определяется как имя, с которым связывается некоторое значение, например:

<xsl:variable name="url" select="'http://www.xsltdev.ru'"/>

создаст переменную с именем

url
и присвоит ей строковое значение
"http://www.xsltdev.ru"
. После этого переменную можно использовать в выражениях, например:

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

Дракон с подарком

Суббота Светлана
3. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
6.62
рейтинг книги
Дракон с подарком

Государь

Кулаков Алексей Иванович
3. Рюрикова кровь
Фантастика:
мистика
альтернативная история
историческое фэнтези
6.25
рейтинг книги
Государь

Новая мама в семье драконов

Смертная Елена
2. В доме драконов
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Новая мама в семье драконов

Прорвемся, опера!

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

Офицер-разведки

Поселягин Владимир Геннадьевич
2. Красноармеец
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Офицер-разведки

Провинциал. Книга 3

Лопарев Игорь Викторович
3. Провинциал
Фантастика:
космическая фантастика
рпг
аниме
5.00
рейтинг книги
Провинциал. Книга 3

Мимик нового Мира 5

Северный Лис
4. Мимик!
Фантастика:
юмористическая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Мимик нового Мира 5

Убивать чтобы жить 3

Бор Жорж
3. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 3

Мама для дракончика или Жена к вылуплению

Максонова Мария
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Мама для дракончика или Жена к вылуплению

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

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

Ученик

Первухин Андрей Евгеньевич
1. Ученик
Фантастика:
фэнтези
6.20
рейтинг книги
Ученик

Сопротивляйся мне

Вечная Ольга
3. Порочная власть
Любовные романы:
современные любовные романы
эро литература
6.00
рейтинг книги
Сопротивляйся мне

Сам себе властелин 4

Горбов Александр Михайлович
4. Сам себе властелин
Фантастика:
фэнтези
юмористическая фантастика
попаданцы
6.09
рейтинг книги
Сам себе властелин 4

Полковник Империи

Ланцов Михаил Алексеевич
3. Безумный Макс
Фантастика:
альтернативная история
6.58
рейтинг книги
Полковник Империи