CodeKitHub
Алати за кôд

XPath тестер

Poslednje ažurirano:

XPath је језик за упите који служи за бирање чворова из XML (или HTML) документа помоћу израза путање, слично начину на који путања датотеке бира фајл у стаблу фасцикли. Овај алат вам омогућава да налепите било који XML, напишете XPath израз и одмах видите који чворови се поклапају — укључујући број чворова, серијализовани излаз и јасне поруке о грешкама за неисправан XML или неисправну XPath синтаксу. Ради у потпуности у вашем прегледачу користећи native `document.evaluate` мотор уграђен у сваки савремени прегледач, тако да ништа од онога што налепите никада не бива нигде отпремљено.

Š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

  1. Налепите или уредите свој XML (или HTML) у пољу за унос — узорак документа књижаре је унапред попуњен како бисте одмах видели да ради.
  2. Унесите XPath израз у поље за израз или уредите унапред попуњен пример.
  3. Кликните на „Evaluate“ (или притисните Enter у пољу за израз).
  4. Прочитајте поклопљене чворове испод, са бројем на врху; скаларни резултати (бројеви, стрингови, логичке вредности) приказују се директно.
  5. Ако су 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]/title

Rezultat

✓ 2 node(s) matched
<title>Learning XPath</title>
<title>Dune</title>

Само 2 од 3 књиге имају цену изнад 30, тако да се враћају тачно 2 елемента <title> — трећа књига (Gatsby, 12,99 $) исправно је изостављена.

XPath и CSS селектори на први поглед

Оба језика бирају чворове из документа, али решавају различите проблеме. Користите ову табелу да изаберете прави алат за дато бирање.

МогућностXPathCSS селектори
Бирање по ознаци/класи/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()` вашег прегледача — истог мотора који ваш прегледач већ интерно користи. Ништа што унесете или налепите никада не напушта ваш уређај.