xpath

XPath выражения

XPath выражения — это способ записи указания на место в дереве документа, т.е. указание на конкретные узлы.

Рассмотрим один пример:

xpath

Здесь Root — это весь документ (не путать с корневым тегом). У него элемент catalog. У catalog есть дочерние элементы. У product также видим 2 дочерних элемента плюс пространство имен, которое автоматически наследовалось от корня.

На деле в такой схеме может быть несколько тысяч элементов. А XPath служит для навигации по такому дереву.

Оси выборки

Большинство XPath выражений мы пишем от корня, но это не факт. Когда процессор работает, он держит у себя некий узел. Этот узел и является текущим узлом обработки. И мы можем писать относительные пути относительно этого текущего контекста. Для этого нужно двигаться наверх, вниз, направо, налево. И все это в XPath называется оси выборки.

Пример осей выборки:

xpath

Здесь мы видим 12 осей выборки:

  • self — текущий выбранный узел, это я сам, от меня.
  • child — дочерние узлы.
  • parent — родитель.
  • attribute — атрибут дочерний.
  • descendent — все узлы, которые по DOM структуре ниже меня.
  • descendent-or-self — текущий узел плюс все его нисходящие узлы.
  • ancestor — все восходящие узлы, т.е. которые выше текущего узла.
  • ancestor-or-self — все восходящие узлы плюс текущий узел.
  • following — все следующие за мной узлы на обработку.
  • following-sibling — следующие узлы за мной на одном уровне DOM модели.
  • preceding — все предшествующие узлы передо мной (текущим выбранным узлом).
  • preceding-sibling — предшествующие узлы на одном уровне с текущим узлом.

Оси записываются так:

child::price
self::node()
parent::node()
ancestor-or-self::node()
<!-- функции выборки -->
axis::node-type-function <!-- выборка по типу узла -->
text() <!-- возьми все текстовые узлы -->
node() <!-- все дочерние узлы -->
comment() <!-- все комментарии -->
processing-instruction() <!-- все процессинговые инструкции -->

Предикаты

Предикаты — это фильтры. После названия узла в квадратных скобках можно указать условие фильтрации. Попадают те узлы, которые соответствуют условию фильтрации. Примеры:

<!-- синтаксис -->
axis::node-test[predicate]
<!-- примеры -->
product[last] <!-- положение узла - последний -->
product[@code="123"] <!-- узел, содержащий название 123 -->
product[@code] <!-- есть атрибут -->
position()-1 <!-- предпоследний узел -->
product[3][@discount] <!-- несколько фильтров -->

Типы данных и функции XPath

Булевские функции:

  • boolean (object) — преобразует к логике, все, что хотите.
  • not (boolean) — инвертирует логическое значение.
  • true ().
  • false ().

Числовые функции:

  • number — преобразование к числу.
  • sum — сумма.
  • floor — округление до нижнего целого.
  • celling — округление до верхнего целого.
  • round — правильное, школьное округление.

Строковые функции (основные):

  • comcat — конкатенация (склеивание строк)
  • starts-with — начало с.
  • contains — содержит.
  • subsctring-before — вырезать строку до указанного.
  • substring-after — вырезать строку после указанного.
  • substring (string, number, number*) — вырезать из строки нужное число символов с нужной позиции.
  • string-length — длина строки.
  • normalize-space — убрать пробелы в начале и в конце строки.
  • translate — заменить символ.

Функции множеств узлов:

  • last () — последний узел.
  • position () — номер узла.
  • count — число узлов.
  • local-name — локальное имя без простраства имен.
  • namespace-uri — пространство имен для выбранного узла.
  • name — возвращает имя узла.

Более подробно о функциях XPath читайте на сайте — w3schools.com.




Добавить комментарий

Ваш e-mail не будет опубликован.