Технология XSLT
Шрифт:
□
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
;
это выражение практически аналогично предыдущему (за тем исключением, что в этом способе не учитываются пространства имен). Примеры путей выборки:
□
/
— выберет корневой узел документа; □
/*
— выберет элемент, находящийся в корне документа (элемент документа); □
ancestor::body/a
— выберет все элементы а
, принадлежащие всем предкам-элементам body
контекстного узла; □
/ancestor::body/a
— выберет все элементы а
, принадлежащие всем предкам-элементам body
корневого узла (это будет пустое множество); □
//ancestor::body/a
— выберет все элементы а
, принадлежащие всем предкам-элементам body
корневого узла и потомков корневого узла; иными словами, путь //ancestor::body
выбирает элементы body
, являющиеся предками каких-либо узлов документа, шаг a
— дочерние узлы этих элементов; это выражение равносильно выражению //body[node]/a
; □
preceding::а/@b
— выберет атрибуты b
элементов а
, предшествующих контекстному узлу; □
/doc/chapter
— выберет элементы chapter
, принадлежащие элементам doc
, которые находятся в корне документа; □
//doc/chapter
— выберет элементы chapter
, которые находятся в любом элементе doc
документа; □
doc/chapter
— выберет элементы chapter
, которые находятся в дочерних элементах doc
контекстного узла; □
self::node[ancestor::body[1]]
— выберет множество, состоящее из контекстного узла, если во множестве его предков body
есть первый элемент (иначе — пустое множество); это выражение равносильно выражению self::node[ancestor::body]
, поскольку если ancestor::body
— непустое множество, то у него будет первый элемент; □
*[contains(name, 'ody')]/*[contains(name,'able')]
— выберет множество элементов, в имени которых присутствует строка "able"
при условии, что они принадлежат дочерним элементам контекстного узла, в имени которых присутствует строка "ody"
; □
*[last]/preceding-sibling::*[2]
— выберет второй с конца дочерний элемент контекстного узла. Это выражение равносильно *[last-2]
; □
*/@*
— выберет все атрибуты всех дочерних элементов контекстного узла; □
//* [local-name(.) = 'body']
— выберет все элементы body
текущего документа вне зависимости от их пространств имен. Паттерны
В языке XSLT определяется подмножество выражений языка XPath, которые называются паттернами (от англ. pattern — образец). Паттерны представляют собой упрощенные пути выборки, которые используются для определения, соответствует ли узел заданному образцу.
Поделиться с друзьями: