CodeKitHub
Narzędzia dla programistów

Tester XPath

Ostatnia aktualizacja:

XPath to język zapytań służący do wybierania węzłów z dokumentu XML (lub HTML) za pomocą wyrażeń ścieżkowych, podobnie jak ścieżka pliku wskazuje plik w drzewie folderów. To narzędzie pozwala wkleić dowolny XML, napisać wyrażenie XPath i od razu zobaczyć, które węzły pasują — łącznie z liczbą dopasowań, zserializowanym wynikiem i czytelnymi komunikatami błędów dla niepoprawnego XML-a lub błędnej składni XPath. Działa w całości w twojej przeglądarce, korzystając z natywnego silnika `document.evaluate` wbudowanego w każdą nowoczesną przeglądarkę, więc nic, co wkleisz, nigdy nie jest nigdzie wysyłane.

Czym jest to narzędzie?

XPath (XML Path Language) to standard W3C do nawigacji i wybierania węzłów — elementów, atrybutów, tekstu — wewnątrz dokumentu XML za pomocą zwięzłej składni przypominającej ścieżki, np. `//book[price>30]/title` wybiera każdy element `<title>`, którego rodzeństwo `<price>` jest większe niż 30, w dowolnym miejscu dokumentu. Jest używany przez arkusze stylów XSLT, narzędzia do walidacji XML, web scrapery, frameworki do automatyzacji przeglądarki (Selenium, Playwright) oraz biblioteki XML wielu języków programowania.

Obecna wersja zaimplementowana przez każdą główną przeglądarkę — Chrome, Firefox, Safari, Edge — to XPath 1.0, oryginalna rekomendacja W3C z 1999 roku. To narzędzie korzysta z dokładnie tego natywnego silnika przez API przeglądarki `document.evaluate()`, więc wyniki tutaj odpowiadają temu, co uzyskasz w DevTools przeglądarki lub dowolnym JavaScripcie działającym w niej. Nie implementuje ono późniejszych specyfikacji XPath 2.0/3.0/3.1 (które dodają funkcje takie jak `for`, sekwencje i dopasowywanie wyrażeń regularnych) — zobacz FAQ, co to oznacza w praktyce.

Wyrażenie może zwrócić jeden z dwóch rodzajów wyniku: zbiór węzłów (node-set — zero lub więcej pasujących elementów, atrybutów lub węzłów tekstowych, które to narzędzie serializuje i wyświetla po jednym w wierszu wraz z liczbą), albo wartość skalarną — liczbę, ciąg znaków lub wartość logiczną — gdy samo wyrażenie oblicza wartość, jak `count(//book)` czy `//book[1]/title = 'Dune'`.

Dlaczego warto go używać?

  • Debuguj wyrażenie XPath, zanim zaszyjesz je na stałe w web scraperze, teście Selenium/Playwright lub arkuszu stylów XSLT.
  • Szybko sprawdź, czy dane wyrażenie XPath wybiera oczekiwany węzeł z prawdziwej próbki XML/HTML.
  • Zobacz dokładną liczbę dopasowań i zserializowany wynik zamiast zgadywać na podstawie kodu.
  • Otrzymaj natychmiastowe, czytelne błędy dla niepoprawnego XML-a lub błędnej składni XPath zamiast niezrozumiałego stack trace'a.
  • 100% po stronie klienta: twój XML i wyrażenie nigdy nie opuszczają przeglądarki.

Jak używać

  1. Wklej lub edytuj swój XML (lub HTML) w polu wejściowym — przykładowy dokument księgarni jest wypełniony domyślnie, więc od razu widzisz, jak to działa.
  2. Wpisz wyrażenie XPath w polu wyrażenia lub edytuj wypełniony domyślnie przykład.
  3. Kliknij "Evaluate" (lub naciśnij Enter w polu wyrażenia).
  4. Odczytaj dopasowane węzły poniżej, z liczbą na górze; wyniki skalarne (liczby, ciągi znaków, wartości logiczne) są wyświetlane bezpośrednio.
  5. Jeśli XML lub wyrażenie są niepoprawne, wyniki zastępowane są konkretnym komunikatem błędu.

Przykład

Wejście

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

Wynik

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

Tylko 2 z 3 książek mają cenę powyżej 30, więc zwracane są dokładnie 2 elementy <title> — trzecia książka (Gatsby, 12,99 $) jest poprawnie wykluczona.

XPath a selektory CSS w skrócie

Oba języki wybierają węzły z dokumentu, ale rozwiązują różne problemy. Skorzystaj z tej tabeli, by wybrać właściwe narzędzie do danego zadania.

MożliwośćXPathSelektory CSS
Wybór po tagu/klasie/ID w dół drzewaTakTak — i zwykle szybciej
Wybór po widocznej treści/tekścieTak — `contains(text(),'x')`Nie
Poruszanie się w górę do rodzica/przodkaTak — `//div[span]/..`Nie (`:has()` to nowszy, częściowy wyjątek)
Porównania wartości rodzeństwa (np. `price>30`)TakNie
Działa poza przeglądarką (narzędzia XML po stronie serwera, XSLT)TakNie — selektory CSS są specyficzne dla przeglądarki/DOM

Powiązane narzędzia

Pracujesz ze strukturalnymi formatami danych? Te narzędzia dobrze uzupełniają testowanie XPath.

Formatter JSON · Dekoder JWT

Najczęściej zadawane pytania

Do czego służy XPath?

XPath wybiera węzły — elementy, atrybuty lub tekst — z dokumentu XML lub HTML za pomocą składni ścieżkowej. To język selekcji stojący za transformacjami XSLT, wieloma walidatorami XML, szeroko wykorzystywany też w web scrapingu i automatyzacji testów przeglądarkowych (Selenium, Playwright, Cypress) do lokalizowania elementów na stronie, zwłaszcza gdy same selektory CSS nie potrafią wyrazić potrzebnego warunku.

XPath a selektory CSS — czego używać?

Częściowo się pokrywają, ale nie są równoważne. XPath potrafi wybrać rodzica na podstawie zawartości dziecka (`//div[span='Total']`), poruszać się w górę do przodków oraz wybierać po widocznym tekście (`//button[contains(text(),'Submit')]`) — selektory CSS nie potrafią poruszać się w drzewie w górę ani dopasowywać w ogóle po treści tekstowej. Jeśli po prostu wybierasz po tagu, klasie lub ID, poruszając się w dół dokumentu, selektory CSS są prostsze w zapisie i zwykle szybsze w obliczeniu. Sięgaj po XPath konkretnie wtedy, gdy potrzebujesz "wybierz rodzica tego tekstu" albo "wybierz na podstawie tego, co element mówi", a nie tylko tego, jaki ma tag czy klasę.

Czy to narzędzie obsługuje funkcje z XPath 2.0 lub 3.0?

Nie — podobnie jak żadna przeglądarka. Przeglądarki implementują XPath 1.0 (rekomendacja W3C z 1999 roku) przez `document.evaluate()`, a to narzędzie korzysta z dokładnie tego natywnego silnika, więc jest zgodne z tym, co uzyskasz uruchamiając to samo wyrażenie w DevTools przeglądarki lub w JavaScripcie. Funkcje i możliwości wprowadzone w XPath 2.0/3.0/3.1 (jak wyrażenia `for`, sekwencje czy `matches()` z wyrażeniami regularnymi) nie są dostępne — działają tu tylko funkcje z 1.0, takie jak `contains()`, `starts-with()`, `substring()`, `count()`, `position()` i `last()`.

Jakie popularne wyrażenia XPath warto znać?

`//tag` wybiera każdy element `<tag>` w dowolnym miejscu dokumentu. `//tag[@attr='value']` wybiera elementy `<tag>`, których atrybut `attr` równa się `value`. `//tag[contains(text(),'x')]` wybiera elementy `<tag>`, których bezpośredni tekst zawiera `x`. `//tag[1]` wybiera pierwszy element rodzeństwa `<tag>` w każdym rodzicu. `//parent/child` wybiera elementy `<child>`, które są bezpośrednimi dziećmi `<parent>`. `count(//tag)` zwraca liczbę zamiast zbioru węzłów.

Czy to narzędzie obsługuje przestrzenie nazw XML?

Poprawnie obsługiwany jest tylko powszechny przypadek bez przestrzeni nazw, który pokrywa zdecydowaną większość ręcznie pisanego lub zescrapowanego XML-a/HTML-a. Jeśli twój dokument deklaruje przestrzeń nazw XML (np. `xmlns="..."` na elemencie głównym), `document.evaluate` wymaga świadomej przestrzeni nazw funkcji resolvera mapującej prefiksy na URI, czego to proste narzędzie nie konfiguruje — wyrażenia wobec XML-a z przestrzeniami nazw mogą zwrócić zero dopasowań, nawet jeśli wyglądają na poprawne. To znane ograniczenie, nie błąd: usuń deklarację przestrzeni nazw z próbki albo użyj funkcji local-name() jako obejścia (np. `//*[local-name()='title']`).

Czy mój XML lub wyrażenie XPath są wysyłane na serwer?

Nie. Wszystko działa lokalnie, korzystając z wbudowanych w twoją przeglądarkę `DOMParser` i `document.evaluate()` — tego samego silnika, którego twoja przeglądarka już wewnętrznie używa. Nic, co wpiszesz lub wkleisz, nigdy nie opuszcza twojego urządzenia.

Powiązane narzędzia