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/@*

всС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ссылок

  • a[@id and @rel]

  • a[@id][@rel]

ссылки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ 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