XPath
Пожалуйста, ознакомьтесь с Правилами использования материалов на данном ресурсе
Это гибкий и мощный язык запросов к элементам xml или (x)html документа и xslt преобразований по DOM, который является стандартом консорциума W3C.
Для чего нужен XPath в ZennoPoster?
Для парсинга данных с сайтов (экшен Парсить данные)
Для поиска и взаимодействия с элементами на веб-странице
Можно использовать в Конструкторе действий.
С помощью XPath Вы можете реализовать более универсальный и устойчивый к изменениям вёрстки сайта алгоритм поиска данных в сравнении с регулярными выражениями.
Данный язык запросов позволяет значительно упростить логику парсеров и тем самым ускорить их разработку.
Тестирование запросов при их составлении
В ZennoPoster встроен Тестер X\Json Path с помощью которого Вы можете протестировать составленное выражение.
Так же составить и протестировать XPath выражение можно в окне Инcтрументов web-разработчика (DevTools): откройте окно DevTools, нажмите ctrl+f для вызова строки поиска и введите в неё XPath выражение:
Например, чтобы получить названия мероприятий на сайте 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”] | список (UL), первый элемент которого содержит значение 'OK' |
tr[position() mod 2 = 1] | не четные элементы |
tr[position() mod 2 = 0] | четные элементы |
p/text()[2] | второй текстовый узел |
Атрибуты и фильтры
[] - указывает на фильтрацию элементов
Выражение | Описание |
---|---|
input[@type=”text”] | тег <input> у которого атрибут type равен text |
input[@class='OK'] | тег <input> у которого атрибут class равен OK |
p[not(@*)] | параграфы без атрибутов |
*[@style] | все элементы с атрибутом style |
a[. = “OK”] | ссылки со значением «OK» |
a/@id | идентификаторы ссылок |
a/@* | все атрибуты ссылок |
| ссылки, которые содержат атрибуты id и rel |
a[i or b] | ссылки содержат элемент <i> или <b> |
Функции
Базовые функции Xpath - http://www.w3.org/TR/xpath/#corelib
Функция | Описание | Пример |
---|---|---|
name() | Возвращает имя элемента | [name()='a'] |
string(val) | Получить значение атрибута | string(a[1]/@id) |
substring(val, from, to) | Вырезать часть строки | substring(@id, 1, 6) |
substring-before(val, to) | Вернуть часть строки val перед строкой to | substring-before('12-May-1998', '-') = '12' |
substring-after(val, from) | Вернуть часть строки val после строки to | substring-after('12-May-1998', '-') = 'May-1998' |
string-length() | Возвращает число символов в строке | [string-length(text()) > 5] |
count() | Возвращает количество элементов |
|
concat() | Принимает на вход две или более строки и возвращает конкатенацию (строковое сложение) своих аргументов. |
|
normalize-space() | Аналог Trim | [normalize-space(text())='SEARCH'] |
starts-with() | Начинается с | [starts-with(text(), 'SEARCH')] |
contains() | Содержит | [contains(name(), 'SEARCH')] |
translate(val, from, to) | Производит замену символов первого своего строкового аргумента, которые присутствуют во втором аргументе на соответствующие символы третьего аргумента. | translate(«bar»,«abc»,«ABC») |
Группирование
Выражение | Описание |
---|---|
(table/tbody/tr)[last()] | последняя строка <tr> из всех таблиц |
(//h1|//h2)[contains(text(), 'Text')] | заголовок первого или второго уровня, который содержит «Text» |
a[//tr/@data-id=@data-id] | все ссылки у которых атрибут data-id совпадает с этим же атрибутом у строки таблицы |
Полезные ссылки
https://ru.wikipedia.org/wiki/XPath
https://www.w3schools.com/xml/xpath_syntax.asp