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

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

Жанры

Технология XSLT

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

Шрифт:

□ "

/
" — разделитель шагов выборки;

□ "

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

□ "

/
" — разделитель шагов выборки;

□ "

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

Поскольку каждый из шагов отсчитывается от результатов предыдущего, шаг "

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

□ "

/
" — путь, который выбирает корневой узел;

□ "

/html
" — путь, который выбирает дочерние элементы
html
корневого узла;

□ "

/html/head
" — путь, который выбирает дочерние элементы
head
элементов
html
, находящихся в корне документа;

□ "

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

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

□ для каждого из шагов выборки можно указать направление, в котором он будет выбирать узлы в документе — например, дочерние узлы, узлы- потомки или, наоборот, узлы-предки или братские узлы;

□ выбор узлов может проводиться не только по имени, но также и по типу или принадлежности определенному пространству имен;

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

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

data/a + data/b

Несмотря на то, что

data/a
и
data/b
являются множествами узлов, в арифметическом выражении они будут неявно преобразованы к численному типу. То же самое касается строкового и булевого типа.

Фильтрующие выражения

Фильтрующие выражения выполняют две основные задачи:

□ выбор из вычисленного множества узлов некоторого подмножества в соответствии с заданными логическими критериями-предикатами;

□ вычисление путей выборки относительно узлов фильтрованного множества.

Примеры

Предположим, что переменной

nodeset
присвоено некоторое множество узлов. Задачи типа "выбрать каждый второй узел этого множества" или "выбрать первый узел этого множества" или вообще, любой выбор узлов этого множества в соответствии с некоторыми заданными логическими критериями являются задачами фильтрации. Выражение
$nodeset[1]
выберет первый в порядке просмотра документа узел множества
$nodeset
; выражение
$nodeset[position mod 2 = 0]
выберет четные узлы множества
$nodeset
. Здесь "
[1]
" и "
[position mod 2 = 0]
" являются предикатами — логическими выражениями, которые фильтруют множество.

Фильтрующие выражения также позволяют вычислять пути выборки относительно узлов фильтруемых множеств.

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

<data>

 <string>

<value>a</value>

<value>b</value>

<value>c</value>

 </string>

 <number>

<value>1</value>

<value>2</value>

<value>3</value>

 </number>

</data>

Следующее преобразование демонстрирует использование относительных путей выборки в фильтрующих выражениях:

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

<xsl:stylesheet

 version="1.0"

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

 <xsl:template match="data">

<values>

<xsl:copy-of select="(string | number)/value"/>

</values>

 </xsl:template>

</xsl:stylesheet>

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

<values>

 <value>a</value>

 <value>b</value>

 <value>c</value>

 <value>1</value>

 <value>2</value>

 <value>3</value>

</values>

Элемент

values
выходящего документа содержит множество, являющееся результатом вычисления выражения
(string | number)/value
. Это будет множество элементов
value
, принадлежащих элементам
string
или
number
.

Объединение множеств

Единственная операция над множествами, которая определена в XSLT, — это операция объединения. Если

$nodeset1
и
$nodeset2
— два множества узлов, то результатом вычисления

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

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

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

Сложный пациент

Рам Янка
5. Доктор, помогите...
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Сложный пациент

Локки 5. Потомок бога

Решетов Евгений Валерьевич
5. Локки
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Локки 5. Потомок бога

Отмороженный 6.0

Гарцевич Евгений Александрович
6. Отмороженный
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Отмороженный 6.0

Девятое правило дворянина

Герда Александр
9. Истинный дворянин
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Девятое правило дворянина

Соль этого лета

Рам Янка
1. Самбисты
Любовные романы:
современные любовные романы
6.00
рейтинг книги
Соль этого лета

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

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

Как я строил магическую империю 6

Зубов Константин
6. Как я строил магическую империю
Фантастика:
попаданцы
аниме
фантастика: прочее
фэнтези
5.00
рейтинг книги
Как я строил магическую империю 6

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

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

Двойник Короля 5

Скабер Артемий
5. Двойник Короля
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Двойник Короля 5

Прометей: Неандерталец

Рави Ивар
4. Прометей
Фантастика:
героическая фантастика
альтернативная история
7.88
рейтинг книги
Прометей: Неандерталец

Кодекс Крови. Книга I

Борзых М.
1. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга I

Газлайтер. Том 17

Володин Григорий Григорьевич
17. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 17

Третий Генерал: Том V

Зот Бакалавр
4. Третий Генерал
Фантастика:
городское фэнтези
аниме
сказочная фантастика
попаданцы
5.00
рейтинг книги
Третий Генерал: Том V