Co je tento nástroj?
XPath (XML Path Language) je standard W3C pro procházení a výběr uzlů — elementů, atributů, textu — v dokumentu XML pomocí kompaktní syntaxe podobné cestě, např. `//book[price>30]/title` vybere každý `<title>`, jehož sourozenecký element `<price>` je větší než 30, kdekoli v dokumentu. Používá se v šablonách stylů XSLT, nástrojích pro validaci XML, web scraperech, frameworcích pro automatizaci prohlížečů (Selenium, Playwright) a mnoha knihovnách pro XML v různých programovacích jazycích.
Aktuální verze implementovaná všemi hlavními prohlížeči — Chrome, Firefox, Safari, Edge — je XPath 1.0, původní doporučení W3C z roku 1999. Tento nástroj používá přesně tento nativní engine přes rozhraní `document.evaluate()` prohlížeče, takže výsledky zde odpovídají tomu, co byste získali z nástrojů pro vývojáře v prohlížeči nebo z jakéhokoli JavaScriptu běžícího v prohlížeči. Neimplementuje pozdější specifikace XPath 2.0/3.0/3.1 (ty přidávají funkce jako `for`, sekvence a porovnávání pomocí regulárních výrazů) — viz FAQ, co to v praxi znamená.
Výraz může vrátit jeden ze dvou typů výsledku: sadu uzlů (nula nebo více odpovídajících elementů, atributů či textových uzlů, které tento nástroj serializuje a vypíše po jednom na řádek s počtem), nebo skalární hodnotu — číslo, řetězec nebo booleovskou hodnotu — pokud samotný výraz počítá hodnotu, jako `count(//book)` nebo `//book[1]/title = 'Dune'`.
Proč ho používat?
- Odlaďte výraz XPath ještě předtím, než jej natvrdo zakódujete do web scraperu, testu Selenium/Playwright nebo šablony stylů XSLT.
- Rychle ověřte, zda daný výraz XPath vybírá očekávaný uzel ze skutečné ukázky XML/HTML.
- Podívejte se na přesný počet shod a serializovaný výstup místo hádání z kódu.
- Získejte okamžité a srozumitelné chyby pro poškozený XML nebo neplatnou syntaxi XPath místo nesrozumitelného výpisu volání zásobníku.
- 100% na straně klienta: váš XML a výraz nikdy neopustí váš prohlížeč.
Jak se používá
- Vložte nebo upravte svůj XML (nebo HTML) do vstupního pole — ukázkový dokument knihkupectví je předvyplněný, abyste hned viděli, jak to funguje.
- Zadejte výraz XPath do pole pro výraz nebo upravte předvyplněný příklad.
- Klikněte na „Vyhodnotit“ (nebo stiskněte Enter v poli pro výraz).
- Přečtěte si odpovídající uzly níže, s počtem nahoře; skalární výsledky (čísla, řetězce, booleovské hodnoty) se zobrazují přímo.
- Pokud je XML nebo výraz neplatný, výsledky nahradí konkrétní chybová zpráva.
Pří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>Pouze 2 ze 3 knih mají cenu vyšší než 30, takže se vrátí přesně 2 elementy <title> — třetí kniha (Gatsby, 12,99 $) je správně vyloučena.
XPath vs. CSS selektory na první pohled
Oba jazyky vybírají uzly z dokumentu, ale řeší různé problémy. Použijte tuto tabulku k výběru správného nástroje pro danou selekci.
| Schopnost | XPath | CSS selektory |
|---|---|---|
| Výběr podle tagu/třídy/ID směrem dolů | Ano | Ano — a obvykle rychleji |
| Výběr podle viditelného/textového obsahu | Ano — `contains(text(),'x')` | Ne |
| Procházení nahoru k rodiči/předkovi | Ano — `//div[span]/..` | Ne (`:has()` je novější částečná výjimka) |
| Porovnání hodnot sourozenců (např. `price>30`) | Ano | Ne |
| Funguje i mimo prohlížeč (serverové nástroje pro XML, XSLT) | Ano | Ne — CSS selektory jsou specifické pro prohlížeč/DOM |
Související nástroje
Pracujete se strukturovanými formáty dat? Tyto nástroje se dobře doplňují s testováním XPath.
Časté dotazy
K čemu se XPath používá?
XPath vybírá uzly — elementy, atributy nebo text — z dokumentu XML nebo HTML pomocí syntaxe cest. Je to selekční jazyk stojící za transformacemi XSLT, mnoha validátory XML, a hojně se používá při web scrapingu a automatizaci testů v prohlížeči (Selenium, Playwright, Cypress) k vyhledávání elementů na stránce, zejména když CSS selektory samy o sobě nedokážou vyjádřit potřebnou podmínku.
XPath vs. CSS selektory — co použít?
Překrývají se, ale nejsou ekvivalentní. XPath umí vybrat rodiče na základě obsahu potomka (`//div[span='Total']`), procházet nahoru k předkům a vybírat podle viditelného textu (`//button[contains(text(),'Submit')]`) — CSS selektory nemohou postupovat ve stromu nahoru a vůbec nedokážou porovnávat podle textového obsahu. Pokud jen vybíráte podle tagu, třídy nebo ID směrem dolů v dokumentu, CSS selektory se píšou jednodušeji a obvykle se vyhodnocují rychleji. Sáhněte po XPath konkrétně tehdy, když potřebujete „vybrat rodiče tohoto textu“ nebo „vybrat podle toho, co element říká“, nikoli jen podle toho, jak je otagovaný nebo do jaké patří třídy.
Podporuje tento nástroj funkce XPath 2.0 nebo 3.0?
Ne — a žádný prohlížeč je nepodporuje. Prohlížeče implementují XPath 1.0 (doporučení W3C z roku 1999) přes `document.evaluate()`, a tento nástroj používá přesně tento nativní engine, takže přesně odpovídá tomu, co byste získali spuštěním stejného výrazu v nástrojích pro vývojáře v prohlížeči nebo v JavaScriptu. Funkce a vlastnosti zavedené v XPath 2.0/3.0/3.1 (jako výrazy `for`, sekvence nebo `matches()` s regulárními výrazy) zde nejsou k dispozici — fungují pouze funkce verze 1.0, jako `contains()`, `starts-with()`, `substring()`, `count()`, `position()` a `last()`.
Jaké běžné výrazy XPath bych měl znát?
`//tag` vybere každý `<tag>` kdekoli v dokumentu. `//tag[@attr='value']` vybere elementy `<tag>`, jejichž atribut `attr` se rovná `value`. `//tag[contains(text(),'x')]` vybere elementy `<tag>`, jejichž přímý text obsahuje `x`. `//tag[1]` vybere první sourozenecký element `<tag>` v každém rodiči. `//parent/child` vybere elementy `<child>`, které jsou přímými potomky `<parent>`. `count(//tag)` vrátí číslo místo sady uzlů.
Zvládá tento nástroj jmenné prostory XML?
Čistě je podporován pouze běžný případ bez jmenného prostoru, který pokrývá naprostou většinu ručně psaného nebo scrapovaného XML/HTML. Pokud váš dokument deklaruje jmenný prostor XML (např. `xmlns="..."` na kořenovém elementu), `document.evaluate` vyžaduje funkci resolveru citlivou na jmenné prostory, která mapuje prefixy na URI, což tento jednoduchý nástroj nenastavuje — výrazy vůči XML se jmenným prostorem tak mohou vrátit nulu shod, i když vypadají správně. Jde o známé omezení, nikoli o chybu: odstraňte deklaraci jmenného prostoru ze své ukázky, nebo jako obejití použijte funkci local-name() (např. `//*[local-name()='title']`).
Je můj XML nebo výraz XPath odesílán na server?
Ne. Vše běží lokálně pomocí vestavěného `DOMParser` a `document.evaluate()` vašeho prohlížeče — stejného enginu, který váš prohlížeč již interně používá. Nic, co napíšete nebo vložíte, nikdy neopustí vaše zařízení.