Šta je ovaj alat?
XPath (XML Path Language) је W3C стандард за навигацију и бирање чворова — елемената, атрибута, текста — унутар XML документа помоћу компактне синтаксе налик путањи, нпр. `//book[price>30]/title` бира сваки `<title>` чији је сродни елемент `<price>` већи од 30, било где у документу. Користе га XSLT стилови, алати за валидацију XML-а, веб-скрејпери, оквири за аутоматизацију прегледача (Selenium, Playwright) и XML библиотеке многих програмских језика.
Тренутна верзија коју имплементира сваки главни прегледач — Chrome, Firefox, Safari, Edge — јесте XPath 1.0, оригинална W3C препорука из 1999. године. Овај алат користи потпуно исти native мотор преко `document.evaluate()` API-ја прегледача, тако да резултати овде одговарају ономе што бисте добили из DevTools-а прегледача или било ког JavaScript кода који се извршава у прегледачу. Не имплементира касније спецификације XPath 2.0/3.0/3.1 (које додају функције попут `for`, секвенце и поклапање регуларним изразима) — погледајте ЧПП за то шта то значи у пракси.
Израз може да врати један од два типа резултата: скуп чворова (нула или више поклопљених елемената, атрибута или текстуалних чворова, које овај алат серијализује и наводи по један у реду заједно са бројем), или скаларну вредност — број, стринг или логичку вредност — када сам израз израчунава вредност, попут `count(//book)` или `//book[1]/title = 'Dune'`.
Zašto ga koristiti?
- Отклоните грешке у XPath изразу пре него што га чврсто уградите у веб-скрејпер, Selenium/Playwright тест или XSLT стил.
- Брзо проверите да ли дати XPath бира чвор који очекујете из стварног XML/HTML узорка.
- Погледајте тачан број поклапања и серијализовани излаз уместо нагађања на основу кода.
- Добијте одмах читљиве грешке за лоше формиран XML или неисправну XPath синтаксу уместо неразумљивог трага стека.
- 100% на страни клијента: ваш XML и израз никада не напуштају ваш прегледач.
Kako se koristi
- Налепите или уредите свој XML (или HTML) у пољу за унос — узорак документа књижаре је унапред попуњен како бисте одмах видели да ради.
- Унесите XPath израз у поље за израз или уредите унапред попуњен пример.
- Кликните на „Evaluate“ (или притисните Enter у пољу за израз).
- Прочитајте поклопљене чворове испод, са бројем на врху; скаларни резултати (бројеви, стрингови, логичке вредности) приказују се директно.
- Ако су XML или израз неисправни, конкретна порука о грешци замењује резултате.
Primer
Unos
XML:
<bookstore>
<book><title>The Great Gatsby</title><price>12.99</price></book>
<book><title>Learning XPath</title><price>34.50</price></book>
<book><title>Dune</title><price>45.00</price></book>
</bookstore>
XPath: //book[price>30]/titleRezultat
✓ 2 node(s) matched
<title>Learning XPath</title>
<title>Dune</title>Само 2 од 3 књиге имају цену изнад 30, тако да се враћају тачно 2 елемента <title> — трећа књига (Gatsby, 12,99 $) исправно је изостављена.
XPath и CSS селектори на први поглед
Оба језика бирају чворове из документа, али решавају различите проблеме. Користите ову табелу да изаберете прави алат за дато бирање.
| Могућност | XPath | CSS селектори |
|---|---|---|
| Бирање по ознаци/класи/id-у наниже | Да | Да — и обично брже |
| Бирање по видљивом/текстуалном садржају | Да — `contains(text(),'x')` | Не |
| Кретање навише до родитеља/претка | Да — `//div[span]/..` | Не (`:has()` је новији делимичан изузетак) |
| Поређење вредности сродне деце (нпр. `price>30`) | Да | Не |
| Ради ван прегледача (алати за XML на серверу, XSLT) | Да | Не — CSS селектори су специфични за прегледач/DOM |
Повезани алати
Радите са структурираним форматима података? Ови алати се добро уклапају уз тестирање XPath-а.
→
Često postavljana pitanja
За шта се користи XPath?
XPath бира чворове — елементе, атрибуте или текст — из XML или HTML документа помоћу синтаксе путање. То је језик за бирање који стоји иза XSLT трансформација, многих валидатора XML-а, а широко се користи у веб-скрејпингу и аутоматизацији тестирања прегледача (Selenium, Playwright, Cypress) за проналажење елемената на страници, посебно када сами CSS селектори не могу да изразе потребан услов.
XPath или CSS селектори — шта да користим?
Преклапају се, али нису еквивалентни. XPath може да изабере родитеља на основу садржаја детета (`//div[span='Total']`), да се креће навише до предака и бира по видљивом тексту (`//button[contains(text(),'Submit')]`) — CSS селектори не могу да иду навише у стаблу и уопште не могу да се поклапају по текстуалном садржају. Ако само бирате по ознаци, класи или ID-у наниже кроз документ, CSS селекторе је једноставније написати и обично се брже израчунавају. Посегните за XPath-ом конкретно када вам треба „изабери родитеља овог текста“ или „изабери на основу онога што елемент говори“, а не само по томе како је означен или класификован.
Да ли овај алат подржава XPath 2.0 или 3.0 функције?
Не — као ни иједан прегледач. Прегледачи имплементирају XPath 1.0 (W3C препоруку из 1999. године) преко `document.evaluate()`, а овај алат користи потпуно исти native мотор, тако да тачно одговара ономе што бисте добили покретањем истог израза у DevTools-у прегледача или у JavaScript-у. Функције и могућности уведене у XPath 2.0/3.0/3.1 (попут `for` израза, секвенци или `matches()` са регуларним изразима) нису доступне — овде раде само 1.0 функције попут `contains()`, `starts-with()`, `substring()`, `count()`, `position()` и `last()`.
Које уобичајене XPath изразе треба да знам?
`//tag` бира сваки `<tag>` било где у документу. `//tag[@attr='value']` бира `<tag>` елементе чији је атрибут `attr` једнак `value`. `//tag[contains(text(),'x')]` бира `<tag>` елементе чији директни текст садржи `x`. `//tag[1]` бира прво `<tag>` сродно дете у сваком родитељу. `//parent/child` бира `<child>` елементе који су директна деца `<parent>`. `count(//tag)` враћа број уместо скупа чворова.
Да ли овај алат обрађује XML именске просторе?
Чисто је подржан само уобичајен случај без именског простора, што покрива велику већину ручно писаног или скрејпованог XML/HTML. Ако ваш документ декларише XML именски простор (нпр. `xmlns="..."` на кореном елементу), `document.evaluate` захтева функцију резолвера свесну именских простора која мапира префиксе на URI-је, што овај једноставан алат не поставља — изрази над XML-ом са именским простором могу вратити нула поклапања чак и када изгледају исправно. Ово је познато ограничење, а не грешка: уклоните декларацију именског простора из свог узорка или користите local-name() функцију као решење (нпр. `//*[local-name()='title']`).
Да ли се мој XML или XPath израз шаље на сервер?
Не. Све се извршава локално коришћењем уграђеног `DOMParser`-а и `document.evaluate()` вашег прегледача — истог мотора који ваш прегледач већ интерно користи. Ништа што унесете или налепите никада не напушта ваш уређај.