CodeKitHub
Kodeværktøjer

XPath-tester

Senest opdateret:

XPath er et forespørgselssprog til at udvælge noder fra et XML- (eller HTML-) dokument ved hjælp af sti-udtryk, ligesom en filsti udpeger en fil i en mappestruktur. Med dette værktøj kan du indsætte vilkårlig XML, skrive et XPath-udtryk og straks se hvilke noder der matcher — inklusive antal noder, serialiseret output og tydelige fejlmeddelelser for ugyldig XML eller ugyldig XPath-syntaks. Det kører helt i din browser via den indbyggede, native `document.evaluate`-motor, som findes i enhver moderne browser, så intet du indsætter bliver nogensinde uploadet nogen steder.

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

  1. 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.
  2. Skriv et XPath-udtryk i udtryksfeltet, eller rediger det forudfyldte eksempel.
  3. Klik på "Evaluér" (eller tryk Enter i udtryksfeltet).
  4. Læs de matchende noder nedenfor, med et antal øverst; skalarresultater (tal, strenge, booleske værdier) vises direkte.
  5. 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]/title

Output

✓ 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.

EgenskabXPathCSS-selektorer
Udvælg efter tag/klasse/ID nedadJaJa — og som regel hurtigere
Udvælg efter synligt/tekstindholdJa — `contains(text(),'x')`Nej
Bevæg sig opad til en forælder/forfaderJa — `//div[span]/..`Nej (`:has()` er en nyere delvis undtagelse)
Sammenligning af søskendeværdier (f.eks. `price>30`)JaNej
Fungerer uden for en browser (server-side XML-værktøjer, XSLT)JaNej — 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.

JSON-formaterer · JWT-dekoder

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.

Relaterede værktøjer