Čo je tento nástroj?
XPath (XML Path Language) je štandard W3C na navigáciu a výber uzlov — elementov, atribútov, textu — v rámci XML dokumentu pomocou kompaktnej syntaxe podobnej ceste, napr. `//book[price>30]/title` vyberie každý `<title>`, ktorého súrodenecký element `<price>` je väčší ako 30, kdekoľvek v dokumente. Používajú ho XSLT šablóny štýlov, nástroje na validáciu XML, webové scrapery, frameworky na automatizáciu prehliadača (Selenium, Playwright) a XML knižnice mnohých programovacích jazykov.
Aktuálna verzia implementovaná každým hlavným prehliadačom — Chrome, Firefox, Safari, Edge — je XPath 1.0, pôvodné odporúčanie W3C z roku 1999. Tento nástroj používa presne ten istý natívny engine prostredníctvom API `document.evaluate()` prehliadača, takže výsledky tu zodpovedajú tomu, čo by ste dostali z DevTools prehliadača alebo akéhokoľvek JavaScriptu bežiaceho v prehliadači. Neimplementuje neskoršie špecifikácie XPath 2.0/3.0/3.1 (tie pridávajú funkcie ako `for`, sekvencie a zhodu pomocou regulárnych výrazov) — pozrite si Často kladené otázky, čo to v praxi znamená.
Výraz môže vrátiť jeden z dvoch typov výsledkov: množinu uzlov (nula alebo viac zhodných elementov, atribútov alebo textových uzlov, ktoré tento nástroj serializuje a uvedie jeden na riadok spolu s počtom), alebo skalárnu hodnotu — číslo, reťazec alebo booleovskú hodnotu — keď samotný výraz vypočíta hodnotu, ako napríklad `count(//book)` alebo `//book[1]/title = 'Dune'`.
Prečo ho používať?
- Odlaďte XPath výraz predtým, ako ho natvrdo zakódujete do webového scrapera, testu Selenium/Playwright alebo XSLT šablóny štýlov.
- Rýchlo skontrolujte, či daný XPath vyberá uzol, ktorý očakávate, zo skutočnej vzorky XML/HTML.
- Uvidíte presné počty zhôd a serializovaný výstup namiesto hádania z kódu.
- Získajte okamžité, čitateľné chyby pri poškodenom XML alebo neplatnej XPath syntaxi namiesto nezrozumiteľného výpisu zásobníka.
- 100 % na strane klienta: vaše XML a výraz nikdy neopustia váš prehliadač.
Ako sa používa
- Vložte alebo upravte svoje XML (alebo HTML) do vstupného poľa — vzorový dokument kníhkupectva je vopred vyplnený, aby ste hneď videli, ako to funguje.
- Do poľa výrazu zadajte XPath výraz alebo upravte vopred vyplnený príklad.
- Kliknite na „Evaluate“ (alebo v poli výrazu stlačte Enter).
- Prečítajte si zhodné uzly nižšie, s počtom hore; skalárne výsledky (čísla, reťazce, booleovské hodnoty) sa zobrazujú priamo.
- Ak je XML alebo výraz neplatný, výsledky nahradí konkrétna chybová správa.
Príklad
Vstup
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]/titleVýstup
✓ 2 node(s) matched
<title>Learning XPath</title>
<title>Dune</title>Iba 2 z 3 kníh majú cenu nad 30, takže sa vrátia presne 2 elementy <title> — tretia kniha (Gatsby, 12,99 $) je správne vylúčená.
XPath vs. CSS selektory na prvý pohľad
Oba jazyky vyberajú uzly z dokumentu, ale riešia odlišné problémy. Použite túto tabuľku na výber správneho nástroja pre daný výber.
| Schopnosť | XPath | CSS selektory |
|---|---|---|
| Výber podľa tagu/triedy/id smerom nadol | Áno | Áno — a zvyčajne rýchlejšie |
| Výber podľa viditeľného/textového obsahu | Áno — `contains(text(),'x')` | Nie |
| Prechod nahor k rodičovi/predkovi | Áno — `//div[span]/..` | Nie (`:has()` je novšia čiastočná výnimka) |
| Porovnávanie hodnôt súrodencov (napr. `price>30`) | Áno | Nie |
| Funguje mimo prehliadača (nástroje pre XML na strane servera, XSLT) | Áno | Nie — CSS selektory sú špecifické pre prehliadač/DOM |
Súvisiace nástroje
Pracujete so štruktúrovanými formátmi dát? Tieto nástroje sa dobre hodia k testovaniu XPath.
Časté otázky
Na čo sa používa XPath?
XPath vyberá uzly — elementy, atribúty alebo text — z XML alebo HTML dokumentu pomocou cestovej syntaxe. Je to výberový jazyk stojaci za XSLT transformáciami, mnohými validátormi XML, a hojne sa využíva pri webovom scrapingu a automatizácii testovania prehliadačov (Selenium, Playwright, Cypress) na vyhľadávanie elementov na stránke, najmä keď samotné CSS selektory nedokážu vyjadriť potrebnú podmienku.
XPath vs. CSS selektory — čo by som mal použiť?
Prekrývajú sa, ale nie sú rovnocenné. XPath dokáže vybrať rodiča na základe obsahu potomka (`//div[span='Total']`), prechádzať nahor k predkom a vyberať podľa viditeľného textu (`//button[contains(text(),'Submit')]`) — CSS selektory nedokážu ísť v strome nahor a vôbec nedokážu vyhľadávať podľa textového obsahu. Ak vyberáte iba podľa tagu, triedy alebo ID smerom nadol cez dokument, CSS selektory sa píšu jednoduchšie a spravidla sa vyhodnocujú rýchlejšie. Siahnite po XPath konkrétne vtedy, keď potrebujete „vybrať rodiča tohto textu“ alebo „vybrať podľa toho, čo element hovorí“, nielen podľa toho, ako je otagovaný alebo klasifikovaný.
Podporuje tento nástroj funkcie XPath 2.0 alebo 3.0?
Nie — rovnako ako žiadny prehliadač. Prehliadače implementujú XPath 1.0 (odporúčanie W3C z roku 1999) prostredníctvom `document.evaluate()`, a tento nástroj používa presne ten istý natívny engine, takže presne zodpovedá tomu, čo by ste dostali spustením rovnakého výrazu v DevTools prehliadača alebo v JavaScripte. Funkcie a vlastnosti zavedené v XPath 2.0/3.0/3.1 (napríklad výrazy `for`, sekvencie alebo `matches()` s regulárnymi výrazmi) nie sú dostupné — fungujú tu iba funkcie 1.0, ako `contains()`, `starts-with()`, `substring()`, `count()`, `position()` a `last()`.
Aké bežné XPath výrazy by som mal poznať?
`//tag` vyberie každý `<tag>` kdekoľvek v dokumente. `//tag[@attr='value']` vyberie elementy `<tag>`, ktorých atribút `attr` sa rovná `value`. `//tag[contains(text(),'x')]` vyberie elementy `<tag>`, ktorých priamy text obsahuje `x`. `//tag[1]` vyberie prvého súrodenca `<tag>` v každom rodičovi. `//parent/child` vyberie elementy `<child>`, ktoré sú priamymi potomkami `<parent>`. `count(//tag)` vráti číslo namiesto množiny uzlov.
Zvláda tento nástroj menné priestory XML?
Čisto je podporovaný iba bežný prípad bez menného priestoru, čo pokrýva veľkú väčšinu ručne písaného alebo scrapovaného XML/HTML. Ak váš dokument deklaruje menný priestor XML (napr. `xmlns="..."` na koreňovom elemente), `document.evaluate` vyžaduje funkciu resolvera, ktorá si je vedomá menných priestorov a mapuje prefixy na URI, čo tento jednoduchý nástroj nenastavuje — výrazy voči XML s menným priestorom môžu vrátiť nula zhôd, aj keď vyzerajú správne. Ide o známe obmedzenie, nie o chybu: odstráňte deklaráciu menného priestoru zo svojej vzorky, alebo ako riešenie použite funkciu local-name() (napr. `//*[local-name()='title']`).
Je moje XML alebo XPath výraz odosielaný na server?
Nie. Všetko beží lokálne pomocou vstavaného `DOMParser` a `document.evaluate()` vášho prehliadača — rovnakého enginu, ktorý váš prehliadač už interne používa. Nič, čo napíšete alebo vložíte, nikdy neopustí vaše zariadenie.