Выбор корневого узла
Как вы уже видели, выбрать корневой узел можно при помощи образца выбора «/», как, например:
Выбор элементов
Можно выбирать элементы, просто задавая их имена, как мы уже видели. Следующий шаблон выбирает элементы
:
Выбор дочерних элементов
При доступе к дочернему узлу определенного узла для разделения имен элементов можно использовать операцию шага /. Пусть, например, требуется создать правило, которое должно применяться только к тем элементам
, которые являются дочерними для элементов
. Для этого можно задать выражение "PLANET/NAME
". Вот правило, окружающее текст таких элементов в элемент HTML <Н3>
:
Можно также использовать символ * в качестве символа-подстановки, что соответствует любому элементу. (* может выбирать только элементы, однако образец @* выбирает любой атрибут.) Например, следующее правило применяется ко всем элементам
, которые являются внуками элементов
:
Выбор потомков элемента
В предыдущем разделе при помощи выражения "
PLANET/NAME
" я выбирал все элементы
, являющиеся прямыми потомками элементов
, а при помощи выражения "PLANET/*/NAME
" — все элементы
, являющиеся внуками элементов
. Есть, однако, более простой способ выполнить оба выбора — применить выражение "PLANET//NAME
", выбирающее все элементы
, находящиеся внутри элементов
, независимо от глубины вложенности (соответствующие элементы называются потомками элемента
). Иными словами, "PLANET//NAME
" выбирает "PLANET/NAME
", "PLANET/*/NAME
", "PLANET/*/*/NAME
" и т.д.:
Выбор атрибутов
Как было показано в главе 3, «Создание и применение шаблонов», можно выбирать атрибуты, если предварять их имена префиксом @. Вы уже работали с атрибутом
UNITS
, который поддерживают большинство детей элементов
:
Earth
1
1
2107
1
128.4
Чтобы извлечь единицы измерения и отобразить их вместе со значениями массы и т.п., можно выбрать атрибут
UNITS
при помощи @UNITS
(листинг 4.1).Листинг 4.1. Выбор атрибутов
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
.
.
.
.
.
.
ТD>
Теперь результирующая HTML-таблица включает не только значения, но и их единицы измерения:
The Planets Table
The Planets Table
.
.
.
Mercury
.0553 (Earth = 1)
1516 miles
Venus
.815 (Earth = 1)
3716 miles
.
.
.
Для выбора всех атрибутов элемента можно также использовать подстановку. Например, "
PLANET/@*
" выбирает все атрибуты элементов
.Формальное определение образцов выбора
Определение образцов выбора приводится также в рекомендации XSLT W3C. Образцы выбора определяются в терминах выражений XPath следующим образом: «Синтаксис для образцов является подмножеством для выражений [XPath]. В частности, пути расположения, удовлетворяющие определенным ограничениям, могут использоваться как образцы. Выражение, в то же время являющееся образцом, всегда вычисляется в объект типа набора узлов. Узел удовлетворяет образцу, если узел является членом результата вычисления образца как выражения по отношению к возможному контексту; возможный контекст — это контекст, контекстный узел которого был выбран, или один из его предков».
Самое важное предложение в предыдущем абзаце — последнее. Суть в том, что узел X удовлетворяет образцу тогда и только тогда, когда существует узел X или предок X, такой, что при применении к этому узлу образца как выражения XPath, результирующий набор узлов будет включать X.