CodeKitHub
Nástroje pro kód

Tester XPath

Naposledy aktualizováno:

XPath je dotazovací jazyk pro výběr uzlů z dokumentu XML (nebo HTML) pomocí cestových výrazů, podobně jako cesta k souboru určuje soubor ve stromu složek. Tento nástroj vám umožní vložit libovolný XML dokument, napsat výraz XPath a okamžitě vidět, které uzly odpovídají — včetně počtu uzlů, serializovaného výstupu a srozumitelných chybových hlášení pro neplatný XML nebo neplatnou syntaxi XPath. Běží zcela ve vašem prohlížeči pomocí nativního enginu `document.evaluate`, který je součástí každého moderního prohlížeče, takže nic, co vložíte, se nikam neodesílá.

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á

  1. 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.
  2. Zadejte výraz XPath do pole pro výraz nebo upravte předvyplněný příklad.
  3. Klikněte na „Vyhodnotit“ (nebo stiskněte Enter v poli pro výraz).
  4. 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.
  5. 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]/title

Vý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.

SchopnostXPathCSS selektory
Výběr podle tagu/třídy/ID směrem dolůAnoAno — a obvykle rychleji
Výběr podle viditelného/textového obsahuAno — `contains(text(),'x')`Ne
Procházení nahoru k rodiči/předkoviAno — `//div[span]/..`Ne (`:has()` je novější částečná výjimka)
Porovnání hodnot sourozenců (např. `price>30`)AnoNe
Funguje i mimo prohlížeč (serverové nástroje pro XML, XSLT)AnoNe — 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.

Formátovač JSON · Dekodér JWT

Č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í.

Související nástroje