Инструменты пользователя

Инструменты сайта


Боковая панель

Перевод этой страницы:

ru:xpath

Обработка XPath

Что такое XPath?

Это гибкий и мощный язык запросов к элементам xml или (x)html документа и xslt преобразований по DOM, который является стандартом консорциума W3C.

Для чего нужен XPath в ZennoPoster?

  • Для парсинга сайтов
  • Для поиска элементов на веб-странице

С помощью синтаксических конструкций XPath Вы можете реализовать более универсальный и устойчивый к изменениям вёрстки сайта алгоритм обработки данных в сравнении с регулярными выражениями.

Данный язык запросов позволяет значительно упростить логику парсеров и тем самым ускорить их разработку.

Например, чтобы получить названия мероприятий на сайте w3.org, мы можем использовать следующее выражение:

//*[@id="w3c_home_upcoming_events"]/ul/li//a

Это и другие выражение выполняются с помощью C# кода:
FindElementByXPath Method (Tab)
https://help.zennolab.com/en/v5/zennoposter/5.11.7.0/webframe.html#topic421.html

FindElementByXPath Method (Document)
https://help.zennolab.com/en/v5/zennoposter/5.11.7.0/webframe.html#topic28.html

FindElementsByXPath Method (Tab)
https://help.zennolab.com/en/v5/zennoposter/5.11.7.0/webframe.html#topic426.html

FindElementsByXPath Method (Document)
https://help.zennolab.com/en/v5/zennoposter/5.11.7.0/webframe.html#topic33.html

FindChildrenByXPath Method
https://help.zennolab.com/en/v5/zennoposter/5.11.7.0/webframe.html#topic101.html

FindChildByXPath Method
https://help.zennolab.com/en/v5/zennoposter/5.11.7.0/webframe.html#topic96.html

Базовый синтаксис

Пути
. # текущий контекст
.// # рекурсивный спуск (на ноль или более уровней от текущего контекста)
/html/body # абсолютный путь
table//a # относительный путь
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] # вторая ссылка, которая содержит элемент <i>
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[@class='OK'] #
p[not(@*)] # параграфы без атрибутов
*[@style] # все элементы с атрибутом style
a[. = «OK»] # ссылки со значением «OK»
a/@id # идентификаторы ссылок
a/@* # все атрибуты ссылок
a[@id and @rel] # ссылки, которые содержат атрибуты id и rel
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-after(val, from) | Пример substring-after(@id, 'FROM')
substring-before

# Возвращает число символов в строке
string-length() | Пример [string-length(text()) > 5]

# Возвращает количество элементов
count()

# Принимает на вход две или более строки и возвращает конкатенацию (строковое сложение) своих аргументов.
concat()

# Аналог Trim
normalize-space() | Пример [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/@[email protected]] # все ссылки у которых атрибут data-id совпадает с этим же атрибутом у строки таблицы

Полезные ссылки

ru/xpath.txt · Последние изменения: 2017/11/02 13:52 — vladz