Hvad er dette værktøj?
XPath (XML Path Language) er en W3C-standard til at navigere og udvælge noder — elementer, attributter, tekst — i et XML-dokument via kompakt, sti-lignende syntaks, f.eks. udvælger `//book[price>30]/title` hver `<title>`, hvis søskendeelement `<price>` er større end 30, uanset hvor i dokumentet. Det bruges af XSLT-stylesheets, XML-valideringsværktøjer, web-scrapere, browserautomatiseringsrammer (Selenium, Playwright) og mange programmeringssprogs XML-biblioteker.
Den aktuelle version, som alle større browsere — Chrome, Firefox, Safari, Edge — implementerer, er XPath 1.0, den oprindelige W3C-anbefaling fra 1999. Dette værktøj bruger netop den native motor via browserens `document.evaluate()`-API, så resultaterne her matcher det, du ville få fra browserens udviklerværktøjer eller enhver JavaScript, der kører i en browser. Det implementerer ikke de senere specifikationer XPath 2.0/3.0/3.1 (de tilføjer funktioner som `for`, sekvenser og regex-matching) — se ofte stillede spørgsmål for, hvad det betyder i praksis.
Et udtryk kan returnere én af to slags resultater: et nodesæt (nul eller flere matchende elementer, attributter eller tekstnoder, som dette værktøj serialiserer og lister én ad gangen med et antal), eller en skalarværdi — et tal, en streng eller en boolsk værdi — når selve udtrykket beregner en værdi, som `count(//book)` eller `//book[1]/title = 'Dune'`.
Hvorfor bruge det?
- Fejlfind et XPath-udtryk, før du hardkoder det ind i en web-scraper, en Selenium/Playwright-test eller et XSLT-stylesheet.
- Tjek hurtigt om et givet XPath-udtryk udvælger den node, du forventer, fra en reel XML/HTML-prøve.
- Se præcise match-antal og serialiseret output i stedet for at gætte ud fra koden.
- Få øjeblikkelige, letlæste fejl for ugyldig XML eller ugyldig XPath-syntaks i stedet for en kryptisk stak-trace.
- 100% klient-side: din XML og dit udtryk forlader aldrig din browser.
Sådan bruger du det
- Indsæt eller rediger din XML (eller HTML) i inputfeltet — et eksempeldokument for en boghandel er forudfyldt, så du kan se det virke med det samme.
- Skriv et XPath-udtryk i udtryksfeltet, eller rediger det forudfyldte eksempel.
- Klik på "Evaluér" (eller tryk Enter i udtryksfeltet).
- Læs de matchende noder nedenfor, med et antal øverst; skalarresultater (tal, strenge, booleske værdier) vises direkte.
- Hvis XML'en eller udtrykket er ugyldigt, erstattes resultaterne af en specifik fejlmeddelelse.
Eksempel
Input
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]/titleOutput
✓ 2 node(s) matched
<title>Learning XPath</title>
<title>Dune</title>Kun 2 ud af de 3 bøger har en pris over 30, så præcis 2 <title>-elementer returneres — den tredje bog (Gatsby, $12,99) udelukkes korrekt.
XPath vs. CSS-selektorer på et øjeblik
Begge sprog udvælger noder fra et dokument, men de løser forskellige problemer. Brug denne tabel til at vælge det rigtige værktøj til en given udvælgelse.
| Egenskab | XPath | CSS-selektorer |
|---|---|---|
| Udvælg efter tag/klasse/ID nedad | Ja | Ja — og som regel hurtigere |
| Udvælg efter synligt/tekstindhold | Ja — `contains(text(),'x')` | Nej |
| Bevæg sig opad til en forælder/forfader | Ja — `//div[span]/..` | Nej (`:has()` er en nyere delvis undtagelse) |
| Sammenligning af søskendeværdier (f.eks. `price>30`) | Ja | Nej |
| Fungerer uden for en browser (server-side XML-værktøjer, XSLT) | Ja | Nej — CSS-selektorer er browser-/DOM-specifikke |
Relaterede værktøjer
Arbejder du med strukturerede dataformater? Disse værktøjer fungerer godt sammen med XPath-testning.
Ofte stillede spørgsmål
Hvad bruges XPath til?
XPath udvælger noder — elementer, attributter eller tekst — fra et XML- eller HTML-dokument ved hjælp af sti-syntaks. Det er udvælgelsessproget bag XSLT-transformationer, mange XML-validatorer, og det bruges udbredt til web-scraping og browserbaseret testautomatisering (Selenium, Playwright, Cypress) til at finde elementer på en side, især når CSS-selektorer alene ikke kan udtrykke den nødvendige betingelse.
XPath vs. CSS-selektorer — hvad skal jeg bruge?
De overlapper, men er ikke ligeværdige. XPath kan udvælge et forældreelement baseret på et barns indhold (`//div[span='Total']`), bevæge sig opad til forfædre og udvælge efter synlig tekst (`//button[contains(text(),'Submit')]`) — CSS-selektorer kan ikke bevæge sig opad i træet og kan slet ikke matche på tekstindhold. Hvis du blot udvælger efter tag, klasse eller ID nedad gennem dokumentet, er CSS-selektorer enklere at skrive og generelt hurtigere at evaluere. Grib til XPath specifikt, når du har brug for "vælg forælderen til denne tekst" eller "vælg efter, hvad elementet siger", ikke bare hvad det er tagget eller klassificeret som.
Understøtter dette værktøj XPath 2.0- eller 3.0-funktioner?
Nej — og det gør ingen browser heller. Browsere implementerer XPath 1.0 (W3C-anbefalingen fra 1999) via `document.evaluate()`, og dette værktøj bruger netop den native motor, så det er nøjagtigt i forhold til, hvad du ville få ved at køre det samme udtryk i browserens udviklerværktøjer eller JavaScript. Funktioner og features introduceret i XPath 2.0/3.0/3.1 (som `for`-udtryk, sekvenser eller `matches()` med regex) er ikke tilgængelige her — kun 1.0-funktioner som `contains()`, `starts-with()`, `substring()`, `count()`, `position()` og `last()` virker.
Hvilke almindelige XPath-udtryk bør jeg kende?
`//tag` udvælger hver `<tag>` uanset hvor i dokumentet. `//tag[@attr='value']` udvælger `<tag>`-elementer, hvis `attr`-attribut er lig med `value`. `//tag[contains(text(),'x')]` udvælger `<tag>`-elementer, hvis direkte tekst indeholder `x`. `//tag[1]` udvælger det første `<tag>`-søskendeelement i hver forælder. `//parent/child` udvælger `<child>`-elementer, der er direkte børn af `<parent>`. `count(//tag)` returnerer et tal i stedet for et nodesæt.
Håndterer dette værktøj XML-navnerum?
Kun det almindelige tilfælde uden navnerum understøttes fuldt ud, hvilket dækker langt de fleste håndskrevne eller scrapede XML/HTML-dokumenter. Hvis dit dokument erklærer et XML-navnerum (f.eks. `xmlns="..."` på rodelementet), kræver `document.evaluate` en navnerums-bevidst resolver-funktion, der mapper præfikser til URI'er, hvilket dette simple værktøj ikke sætter op — udtryk mod navnerums-XML kan returnere nul matches, selv når de ser korrekte ud. Dette er en kendt begrænsning, ikke en fejl: fjern navnerumsangivelsen fra din prøve, eller brug funktionen local-name() som en løsning (f.eks. `//*[local-name()='title']`).
Bliver min XML eller mit XPath-udtryk sendt til en server?
Nej. Alt kører lokalt ved hjælp af din browsers indbyggede `DOMParser` og `document.evaluate()` — den samme motor, som din browser allerede bruger internt. Intet du skriver eller indsætter forlader nogensinde din enhed.