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

ЖАНРЫ

Технология XSLT

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

Шрифт:

□ 

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

□ 

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

□ 

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

□ 

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

□ 

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

□ 

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

□ 

following::processing-instruction('fop')
— выберет все узлы инструкций по обработке, которые имеют имя (целевое приложение)
"fop"
и следуют за контекстным узлом в порядке просмотра документа;

□ 

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

□ 

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

□ 

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

□ 

descendant::b
— выберет все элементы
b
, являющиеся потомками контекстного узла;

□ 

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

□ 

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

□ 

ancestor::node
— выберет все узлы, являющиеся предками контекстного узла; выбранное множество будет включать корневой узел (за исключением того случая, когда контекстный узел сам является корневым);

□ 

ancestor::p
выберет все элементы
p
, являющиеся предками контекстного узла;

□ 

ancestor-or-self::node
— выберет контекстный узел, а также все узлы, являющиеся его предками. Выбранное этим шагом множество будет всегда включать корневой узел;

□ 

ancestor-or-self::body
— выберет все элементы
body
, которые являются предками контекстного узла, а также сам контекстный узел, если он является элементом
body
;

□ 

namespace::*
— выберет все узлы пространств имен, ассоциированные с контекстным узлом; это множество будет, как минимум, содержать узел пространства имен
xml
;

□ 

namespace::xyz
— выберет узел пространства имен, определяемого префиксом
xyz
; поскольку один префикс может соответствовать только одному пространству, возвращаемое множество будет содержать не более одного узла.

Шаги выборки с предикатами:

□ 

child::*[1]
— выберет первый дочерний элемент контекстного узла; этот шаг выборки равносилен
child::*[position=1]
;

□ 

child::p[1]
— выберет
первый дочерний элемент p контекстного узла; этот шаг выборки равносилен
child::p[position=1]
;

□ 

child::*[last]
— выберет последний дочерний узел контекстного узла; этот шаг выборки равносилен
child::*[position=last]
;

□ 

child::*[last-1]
— выберет предпоследний дочерний узел контекстного узла; этот шаг выборки равносилен шагу
child::*[position=last]
. Если контекстный узел имеет только один дочерний элемент, выбираемое множество будет пустым;

□ 

child::p[position mod 2 = 0]
— выберет все четные элементы
p
;

□ 

child::p[position mod 2 = 1]
— выберет все нечетные элементы
p
;

□ 

child::а[2][attribute::name='b']
— Выберет второй дочерний элемент
а
контекстного узла, если он имеет атрибут
name
со значением
"b"
;

□ 

child::a[attribute::name='b'][2]
— выберет второй дочерний элемент а контекстного узла из тех, которые имеют атрибут
name
со значением
"b"
; этот шаг выборки отличается от шага выборки в предыдущем примере — порядок следования предикатов имеет значение;

□ 

child::a[position=$i]
— выберет дочерний элемент
а
, позиция которого равна значению переменной
i
;

□ 

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

□ 

preceding-sibling::*[attribute::*]
— выберет все братские узлы контекстного узла, которые предшествуют ему, являются элементами и содержат, по крайней мере, один атрибут;

□ 

preceding-sibling:p[1]
— выберет ближайший (первый в обратном порядке просмотра) элемент p, который предшествует контекстному узлу;

□ 

following::а[attribute::href][not(descendant::img)]
— выберет все узлы, которые следуют за контекстным в порядке просмотра документа, являются элементами с именем
а
, имеют атрибут
href
, но не имеют элементов-потомков с именем
img
;

□ 

ancestor::node[2]
— выберет второго предка (то есть "деда") контекстного узла;

□ 

descendant-or-self::a[attribute::href]
— выберет контекстный узел, а также все узлы-потомки контекстного узла, если они являются элементами с именем
а
и имеют атрибут
href
;

□ 

namespace::*[contains(self::node, 'XML')]
— выберет узлы пространств имен, которые ассоциируются с контекстным узлом, и строковое значение (URI) которых содержит подстроку
'XML'
.

Использование сокращенного синтаксиса в шагах выборки:

Поделиться с друзьями: