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

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

Жанры

Технология XSLT

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

Шрифт:
Листинг 3.19

<xsl:stylesheet

 version="1.0"

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

 <xsl:template match="person">

<xsl:choose>

<xsl:when test="age &gt;= 21">

<xsl:text>Welcome, </xsl:text>

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

<xsl:text>.</xsl:text>

</xsl:when>

<xsl:otherwise>

<xsl:text>Sorry, </xsl:text>

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

<xsl:text>, access denied.</xsl:text>

</xsl:otherwise>

</xsl:choose>

 </xsl:template>

</xsl:stylesheet>

Результатом

этого преобразования будет текст

Sorry, Johnny, access denied.

В этой строке имя

johnny
было заимствовано из входящего документа. Оно было создано элементом
xsl:value-of
:

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

Этот элемент вычислил значение выражения

name
, которое было указано в его атрибуте
select
, преобразовал результат вычисления в строку и создал в выходящем документе текстовый узел, содержащий вычисленное значение.

В данном случае выражение

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

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

<xsl:stylesheet

 version="1.0"

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

 <xsl:template match="person">

<xsl:choose>

<xsl:when test="age &gt;= 21">

<event type="access granted">

<xsl:copy-of select="name"/>

</event>

</xsl:when>

<xsl:otherwise>

<event type="access denied">

<xsl:copy-of select="name"/>

<reason type="underaged">

<xsl:copy-of select="age"/>

</reason>

</event>

</xsl:otherwise>

</xsl:choose>

 </xsl:template>

</xsl:stylesheet>

Листинг 3.21. Выходящий документ

<event type="access denied">

 <name>John</name>

 <reason type="underaged">

<age>19</age>

 </reason>

</event>

Элемент

xsl:copy-of
,
который использовался в этом преобразовании, делает примерно то же самое, что и
xsl:value-of
— вычисляет значение выражения и включает его в дерево выходящего документа. Главным отличием
xsl:copy-of
является то, что при его выполнении вычисленное выражение не преобразуется в строку, что позволяет копировать в выходящее дерево множества узлов и результирующие фрагменты. В приведенном выше примере элементы
name
и
age
выходящего документа являются копиями элементов
name
и
age
входящего документа.

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

<reason type="underaged">

 age

</reason>

будет скопирован в выходящий документ, содержащий текст "

age
". Ни о каком вычислении выражения
age
речь, конечно же, не идет. Для того чтобы в результирующий документ был скопирован результат вычисления выражения, оно должно быть заключено в атрибут одного из вычисляющих элементов, например,
xsl:copy-of
:

<reason type="underaged">

 <xsl:copy-of select="age"/>

</reason>

В этом случае в элемент reason будет включен результат вычисления выражения

age
.

Виды выражений

Выражения языка XPath можно условно разделить на несколько основных типов:

□ пути выборки;

□ выражения фильтрации множеств;

□ выражения объединения множеств;

□ сравнения;

□ логические операции;

□ вызовы функций.

Рассмотрим подробно назначение и принципы работы каждого из типов выражений.

Пути выборки

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

Путь выборки может быть абсолютным (отсчитываться от корневого узла дерева) или относительным (отсчитываться от контекстного узла). Он может состоять из нескольких шагов выборки, каждый из которых относительно предыдущего шага (или начального узла) выбирает некоторое множество узлов. Результатом вычисления пути выборки является множество узлов, выбранное его последним шагом.

Пример

Предположим, что нам нужно получить узел элемента

title
, находящийся в элементе
head
, который находится в элементе
html
, находящемся в корне документа. Соответствующий путь выборки будет выглядеть как:

/html/head/title

Означает он примерно следующее:

□ "

/
" — ведущая косая черта обозначает абсолютный путь выборки, то есть путь, который отсчитывается от корневого узла;

□ "

html
" — шаг выборки элементов
html
;

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

Начальник милиции

Дамиров Рафаэль
1. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции

Наследник в Зеркальной Маске

Тарс Элиан
8. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наследник в Зеркальной Маске

Под знаком Песца

Видум Инди
1. Под знаком Песца
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Под знаком Песца

Крысиный бег

А.Морале
1. Крысиный бег
Фантастика:
городское фэнтези
аниме
5.00
рейтинг книги
Крысиный бег

Камень. Книга восьмая

Минин Станислав
8. Камень
Фантастика:
фэнтези
боевая фантастика
7.00
рейтинг книги
Камень. Книга восьмая

Воронцов. Перезагрузка. Книга 2

Тарасов Ник
2. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Воронцов. Перезагрузка. Книга 2

Отряд

Валериев Игорь
5. Ермак
Фантастика:
альтернативная история
5.25
рейтинг книги
Отряд

Неучтенный элемент. Том 1

NikL
1. Антимаг. Вне системы
Фантастика:
городское фэнтези
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 1

Барон переписывает правила

Ренгач Евгений
10. Закон сильного
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Барон переписывает правила

Жена неверного ректора Полицейской академии

Удалова Юлия
Любовные романы:
любовно-фантастические романы
4.25
рейтинг книги
Жена неверного ректора Полицейской академии

Идеальный мир для Лекаря 16

Сапфир Олег
16. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 16

Прометей: владыка моря

Рави Ивар
5. Прометей
Фантастика:
фэнтези
5.97
рейтинг книги
Прометей: владыка моря

Дракон - не подарок

Суббота Светлана
2. Королевская академия Драко
Фантастика:
фэнтези
6.74
рейтинг книги
Дракон - не подарок

Цикл романов "Целитель". Компиляция. Книги 1-17

Большаков Валерий Петрович
Целитель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Цикл романов Целитель. Компиляция. Книги 1-17