xpath
Пути расположения и оси
Поиск…
замечания
Путь местоположения XPath - это серия шагов местоположения, разделенных символом /
:
step1/step2/step3
Шаг местоположения содержит ось , тест узла и необязательный список предикатов . Ось и проверка узла разделяются двумя символами двоеточия ::
. Предикаты заключены в квадратные скобки:
axis::nodeTest[predicate1][predicate2]
Оценка пути местоположения начинается с набора узлов, содержащего контекстный узел, заданный контекстом выражения, или корневым узлом , если путь местоположения начинается с /
. На каждом шаге каждый узел N в исходном наборе узлов заменяется набором узлов, которые
- может быть достигнуто от N, следующего за данной осью ,
- соответствует тесту узла и
- соответствует всем предикатам .
Результатом выражения пути местоположения является конечный набор узлов, полученный после обработки всех шагов местоположения .
Перемещение дочерних элементов
Переход от корневого узла к элементу потомка с использованием child
оси:
/child::html/child::body/child::div/child::span
Поскольку child
ось является осью по умолчанию, это может быть сокращено до:
/html/body/div/span
Обход всех потомков
Точки descendant
и descendant-or-self
самца могут использоваться для нахождения всех элементов-потомков узла на любой глубине. Напротив, child
ось пересекает только детей.
/child::html/descendant::span
/child::html/descendant-or-self::*
Двойная слэш //
является ярлыком для /descendant-or-self::node()/
. Таким образом, следующие выражения эквивалентны:
table//td
child::table/descendant-or-self::node()/child::td
child::table/descendant::td
table/descendant::td
Прохождение предков
parent
ось содержит только родительский элемент узла. Следующее выражение выбирает элемент html
, обводя над элементом body
:
/child::html/child::body/parent::html
..
является ярлыком для parent::node()
Оси ancestor
и ancestor-or-self
пересекают всех предков узла. Следующее выражение возвращает все элементы div
, являющиеся предками контекстного узла:
ancestor::div
Ось «сам»
self
ось содержит только сам узел контекста. Выражение .
является ярлыком для self::node()
и всегда соответствует узлу контекста. .
ярлык полезен для перечисления потомков контекстного узла. Следующие выражения эквивалентны:
.//span
self::node()/descendant-or-self::node()/child::span
descendant::span
self
ось может быть полезной в XPath 1.0 предикатах. Например, для выбора всех h1
, h2
и h3
дочерних узлов контекстного узла:
*[self::h1 or self::h2 or self::h3]
Перемещение следующих и предыдущих узлов
Оси following-sibling
и preceding-sibling
following-sibling
и preceding-sibling
содержат братья и сестры до или после контекстного узла, а following
и preceding
оси содержат все узлы в документе до или после контекстного узла, но:
- Ни одна из этих осей не содержит узлов атрибута или пространства имен.
-
following
ось не содержит потомков. -
preceding
ось не содержит предков.
Примеры:
following::span[1]
following-sibling::*[last()]
Перемещение атрибутов и узлов пространства имен
Оси attribute
и namespace
содержат все узлы атрибута и пространства имен элемента. Shortcut @
обозначает attribute::
, поэтому следующие эквиваленты:
child::div/attribute::class
div/@class