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

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

Жанры

Технология XSLT

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

Шрифт:

Пути выборки — это наиболее часто используемые XPath-выражения и для того, чтобы сделать их менее громоздкими, в XPath имеется так называемый сокращенный синтаксис, с которым мы уже встречались в предыдущих главах. Его продукции записываются следующим образом:

[XP10] AbbreviatedAbsoluteLocationPath

 :: = '//' RelativeLocationPath

[XP11] AbbreviatedRelativeLocationPath

 ::= RelativeLocationPath '//' Step

[XP12] AbbreviatedStep

 ::= '.'

| '..'

[XP13] AbbreviatedAxisSpecifier

 ::= '@'?

Первое

сокращение,
'//'
— это краткая версия для
"/descendant-or-self::node/"
. Шаг выборки
descendant-or-self::node
возвращает всех потомков контекстного узла (не включая узлов атрибутов и пространств имен). Сокращенный путь вида
'//' RelativeLocationPath
раскрывается в путь вида

'/descendant-or-self::node/' RelativeLocation

а путь вида

RelativeLocationPath '//' Step
— в путь

RelativeLocationPath '/descendant-or-self::node/' Step

Сокращенный шаг вида

'.'
возвращает контекстный узел, его полная версия —
self::node
.

Сокращенный шаг '

..
' возвращает родительский узел контекстного узла. Это сокращение равносильно шагу выборки
parent::node
.

Заметим, что сокращения

"."
и
".."
являются сокращенными шагами выборки. Это, в частности, означает, что к ним нельзя присовокуплять предикаты и так далее. Выражение
".[ancestor::body]"
будет с точки зрения синтаксиса XPath некорректным. Вместо этого можно использовать выражение
"self::node[ancestor::body]"
, которое будет синтаксически правильным.

Наиболее часто используемой осью навигации является ось

child
, содержащая все дочерние узлы контекстного узла. Шаги выборки, которые обращаются к дочерним узлам, имеют вид
'child::' NodeTest Predicate*
. Самым полезным сокращением является то, что в шагах такого вида дескриптор оси
'child::'
может быть опущен, и тогда упрощенные шаги будут иметь вид
NodeTest Predicate*
.

Дескриптор оси навигации

'attribute::'
также может быть сокращен до
'@'
. Шаг выборки
'attribute::' NodeTest Predicate*
может быть переписан с использованием, сокращенного синтаксиса в виде
'@'. NodeTest Predicate*
.

Примеры:

□ 

.//*
— выберет все элементы-потомки контекстного узла;

□ 

..//*
— выберет все дочерние элементы родителя контекстного узла;

□ 

@*
— выберет все атрибуты контекстного узла;

□ 

.//@*
— выберет все атрибуты всех потомков контекстного узла;

□ 

//*
— выберет все элементы документа, содержащего
контекстный узел;

□ 

//@*
— выберет все атрибуты всех элементов документа, содержащего контекстный узел;

□ 

html/body
— выберет элементы
body
, принадлежащие дочерним элементам
html
контекстного узла.

Примеры путей выборки

Простые шаги выборки:

□ 

child::*
— выберет все дочерние элементы контекстного узла;

□ 

child::comment
— выберет все узлы комментариев контекстного узла;

□ 

child::node
— выберет все дочерние узлы контекстного узла вне зависимости от их типа;

□ 

child::query
— выберет все дочерние элементы контекстного узла, имеющие имя
query
;

□ 

child::xsql:*
— выберет все дочерние элементы, которые находятся в пространстве имен, определяемом префиксом
xsql
;

□ 

child::xsql:query
— выберет все дочерние элементы
query
, которые находятся в пространстве имен, определяемом префиксом
xsql
;

□ 

attribute::*
— выберет все атрибуты контекстного узла;

□ 

attribute::href
— выберет атрибут
href
контекстного узла, если он существует;

□ 

parent::*
— выберет родительский узел контекстного узла, если тот является элементом, и пустое множество, если родительский узел имеет другой тип, например является корнем дерева;

□ 

parent::node
— выберет родительский узел контекстного узла вне зависимости от его типа. Единственный случай, когда этот шаг выберет пустое множество — это когда контекстный узел является корневым узлом документа;

□ 

parent::xsl:template
выберет родительский узел, если тот является элементом с именем template и имеет пространство имен с префиксом
xsl
, иначе выберет пустое множество;

□ 

self::*
— выберет контекстный узел, если он является элементом и пустое множество узлов, если контекстный узел имеет другой тип;

□ 

self:*
— выберет все дочерние элементы контекстного узла, принадлежащие пространству имен с префиксом
self
;

□ 

self::text
— выберет контекстный узел, если он является текстовым узлом;

□ 

self::node
— выберет контекстный узел вне зависимости от его типа;

□ 

self::query
— выберет контекстный узел, если он является элементом с именем
query
, и пустое множество, если контекстный узел имеет другое имя или не является элементом;

□ 

preceding::para
— выберет все элементы
para
, которые предшествуют контекстному узлу в порядке просмотра документа;

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

Фронтовик

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

Мастер 5

Чащин Валерий
5. Мастер
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Мастер 5

Жребий некроманта 3

Решетов Евгений Валерьевич
3. Жребий некроманта
Фантастика:
боевая фантастика
5.56
рейтинг книги
Жребий некроманта 3

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

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

Пятнадцать ножевых 3

Вязовский Алексей
3. 15 ножевых
Фантастика:
попаданцы
альтернативная история
7.71
рейтинг книги
Пятнадцать ножевых 3

Метатель. Книга 2

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

Фиктивный брак

Завгородняя Анна Александровна
Фантастика:
фэнтези
6.71
рейтинг книги
Фиктивный брак

Корпулентные достоинства, или Знатный переполох. Дилогия

Цвик Катерина Александровна
Фантастика:
юмористическая фантастика
7.53
рейтинг книги
Корпулентные достоинства, или Знатный переполох. Дилогия

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

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

Кротовский, вы сдурели

Парсиев Дмитрий
4. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
рпг
5.00
рейтинг книги
Кротовский, вы сдурели

На границе империй. Том 5

INDIGO
5. Фортуна дама переменчивая
Фантастика:
боевая фантастика
попаданцы
7.50
рейтинг книги
На границе империй. Том 5

Проданная невеста

Wolf Lita
Любовные романы:
любовно-фантастические романы
5.80
рейтинг книги
Проданная невеста

Росток

Ланцов Михаил Алексеевич
2. Хозяин дубравы
Фантастика:
попаданцы
альтернативная история
фэнтези
7.00
рейтинг книги
Росток

Чайлдфри

Тоцка Тала
Любовные романы:
современные любовные романы
6.51
рейтинг книги
Чайлдфри