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

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

Жанры

Технология XSLT

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

Шрифт:

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

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

Пример

Шаг выборки

attribute::href[. = 'http://www.xsltdev.ru']
состоит из оси навигации
attribute
, которая выбирает атрибуты данного узла, теста узла
href
,
который выбирает узлы с именем
href
и нулевым пространством имен, и предиката
[. = 'http://www.xsitdev.ru']
, который оставляет в выбираемом множестве те узлы, текстовое значение которых равно
"http://www.xsltdev.ru"
. Таким образом, на этом шаге будут выбраны все атрибуты
href
текущего узла, имеющие значение
"http://www.xsltdev.ru"
.

Шаг выборки соответствует EBNF-продукции

Step
, а первая его часть, ось навигации — продукции
AxisSpecifier
:

[XP4] Step ::= AxisSpecifier NodeTest Predicate*

| AbbreviatedStep

[XP5] AxisSpecifier ::= AxisName '::'

| AbbreviatedAxisSpecifier

Продукцию

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

Step ::= '.'

| '..'

| NodeTest Predicate*

| '@' NodeTest Predicate*

| AxisName '::' NodeTest Predicate*

В первых четырех случаях шаг выборки записан при помощи сокращенного синтаксиса, а именно:

□ шаг выборки

'.'
эквивалентен шагу
self::node
, который выбирает контекстный узел;

□ шаг выборки

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

□ шаг выборки вида

NodeTest Predicate*
эквивалентен шагу выборки вида
'child::' NodeTest Predicate*
, который выбирает узлы из множества дочерних узлов контекстного узла;

□ шаг выборки вида

'@' NodeTest Predicate*
эквивалентен шагу выборки вида
'attribute::' NodeTest Predicate*
, который выбирает узлы из множества атрибутов контекстного узла.

Последний случай,

AxisName ' ::' NodeTest Predicate*
представляет полный синтаксис шага выборки: сначала идет наименование оси и тест узла, разделенные двумя двоеточиями (
"::"
), затем несколько предикатов.

Оси навигации

Важной особенностью путей выборки является то, что шаги в них могут совершаться не в двух направлениях (вглубь и на верхний уровень), как в случае с файловыми системами, а во многих других. При выполнении шага выборки из некоторого контекстного узла направление движения по логическому дереву документа задается первой частью этого шага, осью навигации. В XPath имеется 13 осей навигации, а именно:

□ 

self
— эта ось навигации
содержит только сам контекстный узел;

□ 

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

□ 

parent
— содержит родительский узел контекстного узла, если он есть;

□ 

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

□ 

descendant-or-self
— содержит контекстный узел, а также всех его потомков; не содержит узлов атрибутов и пространств имен;

□ 

ancestor
— содержит узлы, которые являются предками контекстного узла;

□ 

ancestor-or-self
— содержит контекстный узел, а также всех его предков;

□ 

following
— содержит узлы, следующие за контекстным узлом, в порядке просмотра документа; не содержит его потомков; не содержит узлов атрибутов и пространств имен;

□ 

following-sibling
— содержит братские узлы контекстного узла, которые следуют за ним в порядке просмотра документа; если контекстный узел является атрибутом или узлом пространства имен, то
following-sibling
не будет содержать никаких узлов;

□ 

preceding
— содержит узлы, предшествующие контекстному узлу в порядке просмотра документа; не содержит его предков; не содержит узлов атрибутов и пространств имен;

□ 

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

□ 

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

□ 

namespace
— содержит узлы пространств имен контекстного узла, если он является элементом; в противном случае не содержит ничего.

Шаг выборки вида

ось::node
будет содержать все узлы, принадлежащие этой оси. Например,
attribute::node
(или, сокращенно
@node
) будет содержать все атрибуты текущего узла.

Для того чтобы понять, как оси навигации расположены в дереве документа, обратимся к рис. 6.9.

Рис. 6.9. Расположение в документе осей навигации

На этом рисунке не показано расположение осей атрибутов и пространств имен вследствие того, что эти оси не имеют в документе физического направления.

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

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

Город Богов 3

Парсиев Дмитрий
3. Профсоюз водителей грузовых драконов
Фантастика:
юмористическое фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Город Богов 3

Амазония

Роллинс Джеймс
101. Книга-загадка, книга-бестселлер
Приключения:
прочие приключения
9.34
рейтинг книги
Амазония

Свет во мраке

Михайлов Дем Алексеевич
8. Изгой
Фантастика:
фэнтези
7.30
рейтинг книги
Свет во мраке

Владеющий

Злобин Михаил
2. Пророк Дьявола
Фантастика:
фэнтези
8.50
рейтинг книги
Владеющий

Под маской, или Страшилка в академии магии

Цвик Катерина Александровна
Фантастика:
юмористическая фантастика
7.78
рейтинг книги
Под маской, или Страшилка в академии магии

Мастер 2

Чащин Валерий
2. Мастер
Фантастика:
фэнтези
городское фэнтези
попаданцы
технофэнтези
4.50
рейтинг книги
Мастер 2

Служанка. Второй шанс для дракона

Шёпот Светлана
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Служанка. Второй шанс для дракона

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

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

Я — Легион

Злобин Михаил
3. О чем молчат могилы
Фантастика:
боевая фантастика
7.88
рейтинг книги
Я — Легион

Вечный. Книга II

Рокотов Алексей
2. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга II

Измена. Мой заклятый дракон

Марлин Юлия
Любовные романы:
любовно-фантастические романы
7.50
рейтинг книги
Измена. Мой заклятый дракон

Студент из прошлого тысячелетия

Еслер Андрей
2. Соприкосновение миров
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Студент из прошлого тысячелетия

Повелитель механического легиона. Том VIII

Лисицин Евгений
8. Повелитель механического легиона
Фантастика:
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Повелитель механического легиона. Том VIII

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

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