Vad är detta verktyg?
XPath (XML Path Language) är en W3C-standard för att navigera och välja noder — element, attribut, text — i ett XML-dokument med hjälp av kompakt, sökvägsliknande syntax, t.ex. väljer `//book[price>30]/title` varje `<title>` vars syskonelement `<price>` är större än 30, var som helst i dokumentet. Det används av XSLT-stilmallar, XML-valideringsverktyg, webbskrapare, ramverk för webbläsarautomation (Selenium, Playwright) och XML-bibliotek i många programmeringsspråk.
Den nuvarande versionen som implementeras av alla större webbläsare — Chrome, Firefox, Safari, Edge — är XPath 1.0, den ursprungliga W3C-rekommendationen från 1999. Detta verktyg använder exakt samma inbyggda motor via webbläsarens `document.evaluate()`-API, så resultaten här stämmer överens med vad du skulle få från webbläsarens DevTools eller vilken JavaScript-kod som helst som körs i en webbläsare. Det implementerar inte de senare specifikationerna XPath 2.0/3.0/3.1 (som lägger till funktioner som `for`, sekvenser och matchning med reguljära uttryck) — se vanliga frågor för vad det innebär i praktiken.
Ett uttryck kan returnera en av två typer av resultat: en nodmängd (noll eller fler matchande element, attribut eller textnoder, som detta verktyg serialiserar och listar en per rad tillsammans med ett antal), eller ett skalärt värde — ett tal, en sträng eller ett booleskt värde — när själva uttrycket beräknar ett värde, som `count(//book)` eller `//book[1]/title = 'Dune'`.
Varför använda det?
- Felsök ett XPath-uttryck innan du hårdkodar det i en webbskrapare, ett Selenium/Playwright-test eller en XSLT-stilmall.
- Kontrollera snabbt om ett givet XPath väljer noden du förväntar dig från ett verkligt XML/HTML-exempel.
- Se exakta träffantal och serialiserad utdata istället för att gissa utifrån kod.
- Få omedelbara, läsbara fel för felformad XML eller ogiltig XPath-syntax istället för ett kryptiskt stackspår.
- 100 % på klientsidan: din XML och ditt uttryck lämnar aldrig din webbläsare.
Så använder du det
- Klistra in eller redigera din XML (eller HTML) i inmatningsrutan — ett exempeldokument för en bokhandel är förifyllt så att du direkt kan se det fungera.
- Skriv ett XPath-uttryck i uttrycksfältet, eller redigera det förifyllda exemplet.
- Klicka på "Evaluate" (eller tryck på Enter i uttrycksfältet).
- Läs de matchade noderna nedan, med ett antal högst upp; skalära resultat (tal, strängar, booleska värden) visas direkt.
- Om XML-koden eller uttrycket är ogiltigt ersätts resultaten av ett specifikt felmeddelande.
Exempel
Inmatning
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]/titleResultat
✓ 2 node(s) matched
<title>Learning XPath</title>
<title>Dune</title>Endast 2 av de 3 böckerna har ett pris över 30, så exakt 2 <title>-element returneras — den tredje boken (Gatsby, 12,99 $) exkluderas korrekt.
XPath vs. CSS-selektorer i korthet
Båda språken väljer noder från ett dokument, men de löser olika problem. Använd den här tabellen för att välja rätt verktyg för ett givet urval.
| Funktion | XPath | CSS-selektorer |
|---|---|---|
| Välja efter tagg/klass/id nedåt | Ja | Ja — och vanligtvis snabbare |
| Välja efter synligt/textuellt innehåll | Ja — `contains(text(),'x')` | Nej |
| Navigera uppåt till en förälder/förfader | Ja — `//div[span]/..` | Nej (`:has()` är ett nyare, delvis undantag) |
| Jämförelser av syskonvärden (t.ex. `price>30`) | Ja | Nej |
| Fungerar utanför en webbläsare (server-sidans XML-verktyg, XSLT) | Ja | Nej — CSS-selektorer är specifika för webbläsare/DOM |
Relaterade verktyg
Arbetar du med strukturerade dataformat? Dessa verktyg passar bra ihop med XPath-testning.
Vanliga frågor
Vad används XPath till?
XPath väljer noder — element, attribut eller text — från ett XML- eller HTML-dokument med hjälp av sökvägssyntax. Det är urvalsspråket bakom XSLT-transformationer, många XML-validerare, och det används flitigt inom webbskrapning och automatisering av webbläsartester (Selenium, Playwright, Cypress) för att hitta element på en sida, särskilt när CSS-selektorer ensamma inte kan uttrycka det villkor som behövs.
XPath vs. CSS-selektorer — vad ska jag använda?
De överlappar men är inte likvärdiga. XPath kan välja en förälder baserat på ett barns innehåll (`//div[span='Total']`), navigera uppåt till förfäder och välja utifrån synlig text (`//button[contains(text(),'Submit')]`) — CSS-selektorer kan inte gå uppåt i trädet och kan inte matcha på textinnehåll alls. Om du bara väljer efter tagg, klass eller ID nedåt genom dokumentet är CSS-selektorer enklare att skriva och i allmänhet snabbare att utvärdera. Ta till XPath specifikt när du behöver "välj förälder till den här texten" eller "välj utifrån vad elementet säger", inte bara vad det är taggat eller klassat som.
Stöder detta verktyg XPath 2.0- eller 3.0-funktioner?
Nej — det gör ingen webbläsare heller. Webbläsare implementerar XPath 1.0 (W3C-rekommendationen från 1999) via `document.evaluate()`, och detta verktyg använder exakt samma inbyggda motor, så det stämmer exakt med vad du skulle få genom att köra samma uttryck i webbläsarens DevTools eller JavaScript. Funktioner och egenskaper som introducerades i XPath 2.0/3.0/3.1 (som `for`-uttryck, sekvenser eller `matches()` med reguljära uttryck) är inte tillgängliga — endast 1.0-funktioner som `contains()`, `starts-with()`, `substring()`, `count()`, `position()` och `last()` fungerar här.
Vilka vanliga XPath-uttryck bör jag känna till?
`//tag` väljer varje `<tag>` var som helst i dokumentet. `//tag[@attr='value']` väljer `<tag>`-element vars attribut `attr` är lika med `value`. `//tag[contains(text(),'x')]` väljer `<tag>`-element vars direkta text innehåller `x`. `//tag[1]` väljer det första `<tag>`-syskonet inom varje förälder. `//parent/child` väljer `<child>`-element som är direkta barn till `<parent>`. `count(//tag)` returnerar ett tal istället för en nodmängd.
Hanterar detta verktyg XML-namnrymder?
Endast det vanliga fallet utan namnrymd stöds fullt ut, vilket täcker den stora majoriteten av handskriven eller skrapad XML/HTML. Om ditt dokument deklarerar en XML-namnrymd (t.ex. `xmlns="..."` på rotelementet) kräver `document.evaluate` en namnrymdsmedveten resolver-funktion som mappar prefix till URI:er, vilket detta enkla verktyg inte konfigurerar — uttryck mot namnrymds-XML kan returnera noll träffar även om de ser korrekta ut. Detta är en känd begränsning, inte en bugg: ta bort namnrymdsdeklarationen från ditt exempel, eller använd funktionen local-name() som en lösning (t.ex. `//*[local-name()='title']`).
Skickas min XML eller mitt XPath-uttryck till en server?
Nej. Allt körs lokalt med hjälp av din webbläsares inbyggda `DOMParser` och `document.evaluate()` — samma motor som din webbläsare redan använder internt. Inget du skriver eller klistrar in lämnar någonsin din enhet.