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