XPath
🔗 Оригинальная страница — Источник данного материала
XPath
Это гибкий и мощный язык запросов к элементам xml или (x)html документа и xslt преобразований по DOM, который является стандартом консорциума W3C.
Для чего нужен XPath в ZennoPoster?
-
Для парсинга данных с сайтов (экшен ❗→ Парсить данные)
-
Для поиска и взаимодействия с элементами на веб-странице
-
Можно использовать в ❗→ Конструкторе действий.
С помощью XPath Вы можете реализовать более универсальный и устойчивый к изменениям вёрстки сайта алгоритм поиска данных в сравнении с ❗→ регулярными выражениями. Данный язык запросов позволяет значительно упростить логику парсеров и тем самым ускорить их разработку.
Тестирование запросов при их составлении
- В ZennoPoster встроен ❗→ Тестер X\Json Path с помощью которого Вы можете протестировать составленное выражение.
- Так же составить и протестировать XPath выражение можно в окне ❗→ Инcтрументов web-разработчика (DevTools): откройте окно DevTools, нажмите ctrl+f для вызова строки поиска и введите в неё XPath выражение:

Например, чтобы получить названия мероприятий на сайте http://w3.org, мы можем использовать следующее выражение:
//*[@id="w3c_home_upcoming_events"]/ul/li//a
Базовый синтаксис
Пути
| Выражение | Описание |
|---|---|
| . | текущий контекст |
| .// | рекурсивный спуск (на ноль или более уровней от текущего контекста) |
| /html/body | абсолютный путь |
| a | относительный путь |
| //* | все в текущем контексте |
| li//a | ссылки, являющиеся «внуками» для li |
| //a|//button | ссылки и кнопки (объединение двух множеств узлов) |
Отношения
| Выражение | Описание |
|---|---|
| a/i/parent::p | непосредственный родитель <p> |
| p/ancestor::\ | все родители |
| p/following-sibling::\ | все следующие братья |
| p/preceding-sibling::\ | все предыдущие братья |
| p/following::\ | все следующ ие элементы кроме потомков |
| p/preceding::\ | все предыдущие элементы кроме предков |
| p/descendant-or-self::\ | контекстный узел и все его потомки |
| p/ancestor-or-self::\ | контекстный узел и все его предки |
Получение узлов
| Выражение | Описание |
|---|---|
| /div/text() | получить текстовые узлы |
| /div/text()[1] | получить первый текстовый узел |
Позиция элемента
| Выражение | Описание |
|---|---|
| a[1] | первый элемент |
| a[last()] | последний элемент |
| a[2] | вторая ссылка |
| a[position() <= 3] | первые 3 ссылки |
| ul[li[1]=”OK”] |