При задании осей в образцах можно воспользоваться рядом сокращений, применяемых практически повсеместно.
Сокращенный синтаксис
Для образцов существует два правила сокращения осей:
•
child::childname
может быть сокращено как
childname
;
•
attribute::childname
может быть сокращено как
@childname
.
В следующем списке перечислен ряд примеров образцов с сокращенным синтаксисом; в конце главы вы увидите много других.
•
PLANET
. Выбирает дочерние элементы
<PLANET>
контекстного узла;
• *. Выбирает все дочерние элементы контекстного узла;
•
@UNITS
. Выбирает атрибут
UNITS
узла;
•
@*
. Выбирает все атрибуты контекстного узла;
•
*/PLANET
. Выбирает всех внуков
<PLANET>
контекстного узла;
•
//PLANET
. Выбирает всех потомков
<PLANET>
корня документа;
•
PLANETS//PLANET
. Выбирает все элементы
<PLANET>
, являющиеся потомками дочерних элементов
<PLANETS>
контекстного узла;
•
//PLANET/NAME
. Выбирает все элементы
<NAME>
, дочерние по отношению к
<PLANET>
;
•
PLANET[NAME]
. Выбирает детей
<PLANET>
контекстного узла, у которых есть дочерние элементы
<NAME>
.
В таком образце, как "
child::PLANET
", "
child
" является осью, a "
PLANET
" — условием узла, что представляет собой вторую часть образцов шага.
Образцы шага, часть 2: условия узла
Условия узла (node test) составляют вторую часть образцов шага. В качестве условий узла можно использовать названия узлов или символ подстановки
*
для выбора и узлов, и их типов. Например, выражение
child::*/child::NAME
выбирает все элементы
<NAME>
, являющиеся правнуками контекстного узла.
Помимо названий узлов и символа подстановки, можно применять также следующие условия узлов:
•
comment
выбирает узлы комментария;
•
node
выбирает узел любого типа;
•
processing-instruction
выбирает узел инструкции обработки. В скобках можно указать название выбираемой инструкции обработки;
•
text
выбирает текстовый узел.
В следующих разделах мы изучим эти условия узлов и рассмотрим примеры их применения.
Выбор комментариев
Текст комментариев можно выбрать при помощи образца
comment
. Разумеется, не следует хранить данные, которые попадут в выходной документ, в комментариях входного документа. Тем не менее, вам может потребоваться преобразовать комментарии из формы
<!--comment-->
в какую-то другую форму, используемую другим языком разметки, — например, элемент