Što je ovaj alat?
XPath (XML Path Language) je W3C standard za navigaciju i odabir čvorova — elemenata, atributa, teksta — unutar XML dokumenta pomoću sažete sintakse nalik putanjama, npr. `//book[price>30]/title` odabire svaki `<title>` čiji je susjedni element `<price>` veći od 30, bilo gdje u dokumentu. Koriste ga XSLT predlošci, alati za validaciju XML-a, web scraperi, okviri za automatizaciju preglednika (Selenium, Playwright) i XML biblioteke mnogih programskih jezika.
Trenutna verzija koju implementiraju svi glavni preglednici — Chrome, Firefox, Safari, Edge — jest XPath 1.0, izvorna W3C preporuka iz 1999. godine. Ovaj alat koristi upravo taj izvorni mehanizam putem preglednikovog `document.evaluate()` API-ja, pa se rezultati ovdje podudaraju s onim što biste dobili u alatima za razvojne programere preglednika ili bilo kojem JavaScript kodu koji se izvodi u pregledniku. Ne implementira kasnije specifikacije XPath 2.0/3.0/3.1 (one dodaju funkcije poput `for`, nizova i podudaranja regularnim izrazima) — pogledajte česta pitanja za praktično značenje toga.
Izraz može vratiti jednu od dvije vrste rezultata: skup čvorova (nula ili više podudarnih elemenata, atributa ili tekstualnih čvorova, koje ovaj alat serijalizira i prikazuje jedan po retku uz broj), ili skalarnu vrijednost — broj, niz znakova ili booleovu vrijednost — kada sam izraz izračunava vrijednost, poput `count(//book)` ili `//book[1]/title = 'Dune'`.
Zašto ga koristiti?
- Otklonite greške u XPath izrazu prije nego ga tvrdo kodirate u web scraper, Selenium/Playwright test ili XSLT predložak.
- Brzo provjerite bira li zadani XPath čvor koji očekujete iz stvarnog XML/HTML uzorka.
- Vidite točan broj podudaranja i serijalizirani izlaz umjesto nagađanja iz koda.
- Dobijte trenutne, čitljive poruke o greškama za neispravan XML ili neispravnu XPath sintaksu umjesto kriptičnog stack tracea.
- 100% na strani klijenta: vaš XML i izraz nikada ne napuštaju vaš preglednik.
Kako ga koristiti
- Zalijepite ili uredite svoj XML (ili HTML) u polje za unos — primjer dokumenta knjižare unaprijed je popunjen kako biste odmah vidjeli da radi.
- Upišite XPath izraz u polje za izraz ili uredite unaprijed popunjeni primjer.
- Kliknite "Evaluate" (ili pritisnite Enter u polju za izraz).
- Pročitajte podudarne čvorove ispod, s brojem na vrhu; skalarni rezultati (brojevi, nizovi znakova, booleove vrijednosti) prikazuju se izravno.
- Ako XML ili izraz nisu valjani, specifična poruka o grešci zamjenjuje rezultate.
Primjer
Ulaz
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]/titleIzlaz
✓ 2 node(s) matched
<title>Learning XPath</title>
<title>Dune</title>Samo 2 od 3 knjige imaju cijenu iznad 30, pa se vraćaju točno 2 elementa <title> — treća knjiga (Gatsby, 12,99 $) ispravno je isključena.
XPath naspram CSS selektora u kratkim crtama
Oba jezika odabiru čvorove iz dokumenta, ali rješavaju različite probleme. Koristite ovu tablicu za odabir pravog alata za određeni odabir.
| Mogućnost | XPath | CSS selektori |
|---|---|---|
| Odabir prema oznaci/klasi/ID-u prema dolje | Da | Da — i obično brže |
| Odabir prema vidljivom/tekstualnom sadržaju | Da — `contains(text(),'x')` | Ne |
| Kretanje prema gore do roditelja/pretka | Da — `//div[span]/..` | Ne (`:has()` je noviji djelomični izuzetak) |
| Usporedba vrijednosti susjednih elemenata (npr. `price>30`) | Da | Ne |
| Radi izvan preglednika (alati za XML na strani poslužitelja, XSLT) | Da | Ne — CSS selektori su specifični za preglednik/DOM |
Povezani alati
Radite sa strukturiranim formatima podataka? Ovi alati dobro se nadopunjuju s testiranjem XPath-a.
Često postavljana pitanja
Za što se koristi XPath?
XPath odabire čvorove — elemente, atribute ili tekst — iz XML ili HTML dokumenta pomoću sintakse nalik putanjama. To je jezik odabira iza XSLT transformacija, mnogih XML validatora, a naveliko se koristi u web scrapingu i automatizaciji testiranja preglednika (Selenium, Playwright, Cypress) za pronalaženje elemenata na stranici, posebno kada sami CSS selektori ne mogu izraziti potreban uvjet.
XPath ili CSS selektori — što koristiti?
Djelomično se preklapaju, ali nisu istovjetni. XPath može odabrati roditelja na temelju sadržaja djeteta (`//div[span='Total']`), kretati se prema gore do predaka i birati prema vidljivom tekstu (`//button[contains(text(),'Submit')]`) — CSS selektori ne mogu ići prema gore u stablu i uopće ne mogu podudarati tekstualni sadržaj. Ako samo birate prema oznaci, klasi ili ID-u krećući se prema dolje kroz dokument, CSS selektore je jednostavnije napisati i općenito ih je brže evaluirati. Posegnite za XPath-om posebno kad trebate „odaberi roditelja ovog teksta” ili „odaberi prema onome što element govori”, a ne samo prema tome kako je označen ili klasificiran.
Podržava li ovaj alat funkcije XPath 2.0 ili 3.0?
Ne — a ne podržava ih niti jedan preglednik. Preglednici implementiraju XPath 1.0 (W3C preporuku iz 1999.) putem `document.evaluate()`, a ovaj alat koristi upravo taj izvorni mehanizam, pa je točan u odnosu na ono što biste dobili pokretanjem istog izraza u alatima za razvojne programere preglednika ili u JavaScriptu. Funkcije i značajke uvedene u XPath 2.0/3.0/3.1 (poput `for` izraza, nizova ili `matches()` s regularnim izrazima) nisu dostupne — ovdje rade samo funkcije verzije 1.0 poput `contains()`, `starts-with()`, `substring()`, `count()`, `position()` i `last()`.
Koje su neke uobičajene XPath izraze dobro znati?
`//tag` odabire svaki `<tag>` bilo gdje u dokumentu. `//tag[@attr='value']` odabire elemente `<tag>` čiji atribut `attr` odgovara vrijednosti `value`. `//tag[contains(text(),'x')]` odabire elemente `<tag>` čiji izravni tekst sadrži `x`. `//tag[1]` odabire prvog susjednog elementa `<tag>` unutar svakog roditelja. `//parent/child` odabire elemente `<child>` koji su izravna djeca elementa `<parent>`. `count(//tag)` vraća broj umjesto skupa čvorova.
Obrađuje li ovaj alat XML imenske prostore (namespaces)?
Uredno je podržan samo uobičajeni slučaj bez imenskog prostora, što pokriva veliku većinu ručno pisanog ili prikupljenog XML/HTML sadržaja. Ako vaš dokument deklarira XML imenski prostor (npr. `xmlns="..."` na korijenskom elementu), `document.evaluate` zahtijeva funkciju resolvera svjesnu imenskih prostora koja mapira prefikse na URI-je, a to ovaj jednostavan alat ne postavlja — izrazi nad XML-om s imenskim prostorima mogu vratiti nula podudaranja čak i kad izgledaju ispravno. Ovo je poznato ograničenje, a ne greška: uklonite deklaraciju imenskog prostora iz svog uzorka ili kao zaobilazno rješenje upotrijebite funkciju local-name() (npr. `//*[local-name()='title']`).
Šalju li se moj XML ili XPath izraz na poslužitelj?
Ne. Sve se izvodi lokalno pomoću ugrađenog `DOMParser`-a i `document.evaluate()` vašeg preglednika — istog mehanizma koji vaš preglednik već interno koristi. Ništa što upišete ili zalijepite nikada ne napušta vaš uređaj.