Поиск…


замечания

Путь местоположения 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


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow