□ 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'
.
Использование сокращенного синтаксиса в шагах выборки:
□ table
— выберет все дочерние элементы table
контекстного узла; этот шаг выборки равносилен child::table
;
□ @*
— выберет все атрибуты контекстного узла; полная версия этого шага выборки выглядит как attribute::*
;
□ *[i]
— выберет первый дочерний элемент контекстного узла; этот шаг выборки равносилен шагу child::*[position()=1]
;
□ *[last()]
— выберет последний дочерний узел контекстного узла; этот шаг выборки равносилен шагу child::*[position()=last()]
;
□ descendant-or-self::a[@href]
— выберет контекстный узел, а также все узлы-потомки контекстного узла, если они являются элементами с именем а и имеют атрибут href
; этот шаг выборки эквивалентен шагу descendant-or-self::a[attribute::href]
; еще короче его можно записать как .//a[@href]
;
□ following::a[@href][not(@target)]
— выберет все узлы, которые следуют в порядке просмотра документа за контекстным узлом, являются элементами с именем а
, имеют атрибут href
, но не имеют атрибута target
; этот шаг эквивалентен шагу following::a[attribute::href][not(attribute::target)]
;
□ ..
— выберет родительский узел контекстного узла; этот шаг выборки эквивалентен шагу parent::node()
;
□ namespace::*[contains(., 'XML')]
— выберет узлы пространств имен, которые ассоциируются с контекстным узлом, и строковое значение (URI) которых содержит подстроку 'XML'
. Этот шаг выборки эквивалентен шагу namespace::*[contains(self::node(), 'XML')]
;
□ preceding-sibling::*[@*]
— выберет все братские узлы контекстного узла, которые предшествуют ему, являются элементами и содержат, по крайней мере, один атрибут;
□ *[not(self::para)]
— выберет все дочерние элементы контекстного узла, кроме элементов para
;
□ *[para or chapter]
— выберет все дочерние элементы контекстного узла, которые имеют хотя бы один дочерний элемент para
или chapter
;
□ *[para and chapter]
— выберет все дочерние элементы контекстного узла, которые имеют хотя бы один дочерний элемент para и хотя бы один дочерний элемент chapter
;
□ *[para][chapter]
— выберет все дочерние элементы контекстного узла, которые
имеют хотя бы один дочерний элемент para
и хотя бы один дочерний элемент chapter
; этот шаг выборки равносилен *[para and chapter]
, однако в общем случае это неверно;
□ *[* or @*]
— выберет все дочерние элементы, содержащие атрибуты или элементы;
□ *[not(* or @*)]
— выберет все дочерние элементы, не содержащие ни атрибутов, ни элементов;
□ *[@name or @href]
— выберет все дочерние элементы контекстного узла, имеющие хотя бы один из атрибутов name
или href
;
□ @*[count(.|../@href) != count(../@href)]
— выберет все атрибуты контекстного узла, кроме атрибутов href
;
□ [local-name() != 'href']
— выберет все атрибуты контекстного узла, кроме атрибутов href
; это выражение практически аналогично предыдущему (за тем исключением, что в этом способе не учитываются пространства имен).
Примеры путей выборки:
□ /
— выберет корневой узел документа;
Читать дальше