Книга: Технология 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*
представляет полный синтаксис шага выборки: сначала идет наименование оси и тест узла, разделенные двумя двоеточиями ("::"
), затем несколько предикатов.
- Пути выборки
- Ограничение результатов выборки FIRST
- 1. Унарная операция выборки
- 1. Операция выборки.
- Первые шаги в нефтяном деле
- Основные шаги
- Первые шаги к разработке мобильного приложения
- Окончательные шаги регистрации системного вызова
- Функция упреждающей выборки
- 5. Необходимы следующие шаги
- Глава 6. Продающий маркетинг. Изучаем шаги технологии «Гвоздь и молоток»
- Шаги расположения XPath, часть 1: оси