XPath Tester

Test XPath-expressies op XML en bekijk alle overeenkomende knooppunten

Probeer een voorbeeld

XML-invoer

Draait lokaal · Veilig om secrets te plakken

Wat is XPath?

XPath (XML Path Language) is een querytaal voor het selecteren van knooppunten uit een XML-document. Gedefinieerd door het W3C als onderdeel van de XSLT-standaard, beschouwt XPath een XML-document als een boom van knooppunten en biedt het een padgebaseerde syntaxis om door die boom te navigeren. Een XPath-expressie zoals //book[@category="fiction"]/title selecteert elk title-element binnen een book-element waarvan het category-attribuut gelijk is aan "fiction". XPath 1.0, de versie die door alle grote browsers en de meeste XML-bibliotheken wordt ondersteund, werd in 1999 gepubliceerd als W3C Recommendation en blijft de meest toegepaste versie.

XPath-expressies retourneren een van vier resultaattypen: knooppuntsets, tekenreeksen, getallen of booleans. Een knooppuntset is het meest voorkomende resultaat en bevat nul of meer XML-knooppunten (elementen, attributen, tekstknooppunten, opmerkingen of verwerkingsinstructies). Tekenreeks-, getal- en booleanresultaten zijn afkomstig van XPath-functies zoals count(), sum(), contains() en booleaanse vergelijkingen. Dit typesysteem maakt XPath geschikt voor zowel het extraheren van gegevens als het schrijven van conditionele logica in XSLT-stylesheets en XML Schema-assertions.

Versie 1.0-expressies werken overal: document.evaluate() in JavaScript, lxml en ElementTree in Python, javax.xml.xpath in Java, DOMXPath in PHP en opdrachtregelprogramma's zoals xmllint. Versies 2.0 en 3.1 voegen rijkere typesystemen en functies toe, maar vereisen speciale engines zoals Saxon. Gebruik standaard versie 1.0. Grijp naar 2.0 of 3.1 alleen wanneer u sequences, reguliere expressies of hogere-ordefuncties nodig hebt — en aanvaard dan de afhankelijkheid van Saxon of BaseX.

Waarom een online XPath Tester gebruiken?

Het schrijven van correcte expressies vereist inzicht in de documentstructuur en testen met echte gegevens. Dit hulpmiddel biedt een interactieve omgeving om expressies te verfijnen zonder een project op te zetten of standaardcode te schrijven.

Expressies direct testen
Plak uw XML, typ een expressie en zie de overeenkomende knooppunten in realtime. Geen compilatiestap, geen REPL-instelling, geen te installeren afhankelijkheden.
🔒
Privacy-eerste verwerking
Alle XML-parsing en query-evaluatie vindt plaats in uw browser via de native DOMParser en document.evaluate() API's. Uw XML-gegevens verlaten uw apparaat nooit.
🔍
Complexe query's stap voor stap debuggen
Splits lange expressies op door elke as en elk predikaat afzonderlijk te testen. Bekijk exact welke knooppunten bij elke stap overeenkomen om fouten te isoleren.
📋
Resultaten kopiëren voor documentatie
Kopieer overeenkomende knooppunten of scalaire resultaten met één klik. Handig voor het plakken in foutrapporten, testassertions of scripts voor gegevensextractie.

Toepassingen van de XPath Tester

Front-endontwikkelaar
Test XPath-selectors voor SVG-manipulatie of op XML gebaseerde configuratie voordat u ze insluit in JavaScript-code die document.evaluate() aanroept.
Back-endengineer
Valideer query's op SOAP-antwoorden of XML API-payloads voordat u extractielogica schrijft in Python, Java of Go.
DevOps / Infrastructuur
Bevraag XML-configuratiebestanden (Maven pom.xml, Spring beans, CI-pipelineconfiguraties) om afhankelijkheidsversies te extraheren of instellingen te controleren zonder de bestanden te bewerken.
QA / Testautomatisering
Bouw en verifieer XPath-locators voor Selenium of Playwright voordat u ze toevoegt aan testscripts. Test randgevallen zoals ontbrekende attributen of naamruimtevoorvoegsels.
Data-engineer
Prototypeer query's voor XML-gegevensfeeds (RSS, Atom, XBRL-financiële rapporten) voordat u ze aansluit op ETL-pipelines.
Student / lerende
Experimenteer met XPath-assen, predikaten en functies met behulp van voorbeeld-XML. Bekijk resultaten direct om intuïtie op te bouwen voor boomtraversalpatronen.

Naslaginformatie XPath-assen

Een as definieert de navigatierichting ten opzichte van het huidige (context)knooppunt. De volledige syntaxis is as::knooppunttest[predikaat], hoewel de meeste ontwikkelaars dagelijks de verkorte vormen (//, @, ..) gebruiken. Deze tabel geeft een overzicht van alle 1.0-assen met praktische voorbeelden.

AsVoorbeeldBeschrijving
childchild::bookDirect children named "book"
descendantdescendant::titleAll "title" elements at any depth
parentparent::*The parent of the current node
ancestorancestor::catalogAll ancestors named "catalog"
following-siblingfollowing-sibling::bookSiblings after the current node
preceding-siblingpreceding-sibling::bookSiblings before the current node
attributeattribute::langThe "lang" attribute of the node
selfself::bookThe current node if it is "book"
descendant-or-self//titleShorthand: any "title" in the tree
ancestor-or-selfancestor-or-self::*Current node plus all ancestors

XPath 1.0-functies

De taal definieert 27 ingebouwde functies in vier categorieën: knooppuntset, tekenreeks, getal en boolean. Dit zijn de functies die u het vaakst gebruikt bij het schrijven van query's. Alle functies worden ondersteund door dit hulpmiddel en door elke conforme implementatie.

FunctieCategorieBeschrijving
text()Node testSelects text content of a node
position()NumericReturns 1-based position in node set
last()NumericReturns size of current node set
count()NumericCounts nodes: count(//book)
contains()Stringcontains(@class, "active") — substring match
starts-with()Stringstarts-with(title, "The") — prefix match
normalize-space()StringStrips leading/trailing whitespace
string-length()NumericReturns character count of a string
sum()Numericsum(//price) — totals numeric values
not()Booleannot(@disabled) — negation
name()StringReturns element or attribute name

Codevoorbeelden

Deze voorbeelden laten zien hoe u expressies programmatisch kunt evalueren. Elk codefragment gebruikt dezelfde catalog.xml-structuur, zodat u de API-verschillen tussen talen kunt vergelijken.

JavaScript (browser)
const xml = `<catalog>
  <book id="1"><title>1984</title><price>7.99</price></book>
  <book id="2"><title>Dune</title><price>12.99</price></book>
</catalog>`

const parser = new DOMParser()
const doc = parser.parseFromString(xml, 'application/xml')

// Select all book titles
const result = doc.evaluate('//book/title', doc, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null)
let node = result.iterateNext()
while (node) {
  console.log(node.textContent) // → "1984", "Dune"
  node = result.iterateNext()
}

// Get a numeric value
const sum = doc.evaluate('sum(//price)', doc, null, XPathResult.NUMBER_TYPE, null)
console.log(sum.numberValue) // → 20.98
Python (lxml)
from lxml import etree

xml = """<catalog>
  <book id="1"><title>1984</title><price>7.99</price></book>
  <book id="2"><title>Dune</title><price>12.99</price></book>
</catalog>"""

tree = etree.fromstring(xml.encode())

# Select elements by attribute
books = tree.xpath('//book[@id="1"]/title/text()')
print(books)  # → ['1984']

# Use predicates with position
first = tree.xpath('//book[1]/title/text()')
print(first)  # → ['1984']

# Boolean check
has_cheap = tree.xpath('boolean(//price[. < 10])')
print(has_cheap)  # → True
Java (javax.xml.xpath)
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.*;
import org.w3c.dom.*;

var factory = DocumentBuilderFactory.newInstance();
var builder = factory.newDocumentBuilder();
var doc = builder.parse(new java.io.File("catalog.xml"));

var xpath = XPathFactory.newInstance().newXPath();

// Select node set
NodeList titles = (NodeList) xpath.evaluate(
    "//book/title", doc, XPathConstants.NODESET
);
for (int i = 0; i < titles.getLength(); i++) {
    System.out.println(titles.item(i).getTextContent());
    // → "1984", "Dune"
}

// Evaluate to number
double total = (double) xpath.evaluate(
    "sum(//price)", doc, XPathConstants.NUMBER
);
System.out.println(total); // → 20.98
CLI (xmllint)
# Select all book titles
xmllint --xpath '//book/title/text()' catalog.xml
# → 1984Dune

# Select by attribute
xmllint --xpath '//book[@id="2"]/title' catalog.xml
# → <title>Dune</title>

# Count nodes
xmllint --xpath 'count(//book)' catalog.xml
# → 2

# Using xmlstarlet for formatted output
xmlstarlet sel -t -v '//book/title' -n catalog.xml
# → 1984
# → Dune

Veelgestelde vragen

Wat is het verschil tussen XPath 1.0 en XPath 3.1?
Versie 1.0 heeft vier gegevenstypen (knooppuntset, tekenreeks, getal, boolean) en 27 functies. Versie 3.1 voegt sequences, maps, arrays, datum-/tijdtypen, reguliere expressies, hogere-ordefuncties en JSON-ondersteuning toe. Browsers en de meeste standaardbibliotheken implementeren alleen versie 1.0. Versie 3.1 vereist een speciale engine zoals Saxon.
Hoe selecteer ik knooppunten met een specifieke attribuutwaarde?
Gebruik een predikaat met de @-afkorting voor de attribuutas. Bijvoorbeeld: //book[@category="fiction"] selecteert alle book-elementen waarbij het category-attribuut gelijk is aan "fiction". U kunt meerdere predikaten combineren: //book[@category="fiction"][@year > 2000].
Waarom retourneert mijn XPath geen resultaten terwijl de XML overeenkomende elementen bevat?
De meest voorkomende oorzaak zijn XML-naamruimten. Als uw XML een standaardnaamruimte declareert (xmlns="..."), behoren elementen tot die naamruimte, ook zonder voorvoegsel. In versie 1.0 moet u de naamruimte registreren en een voorvoegsel in uw expressie gebruiken. In browser-JavaScript geeft u een naamruimte-resolver mee als derde argument aan document.evaluate().
Kan XPath XML-inhoud aanpassen?
Nee. Het is een alleen-lezen querytaal. XPath selecteert en evalueert knooppunten, maar kan ze niet invoegen, verwijderen of bijwerken. Om XML te wijzigen, gebruikt u XSLT-transformaties, DOM-manipulatiemethoden of een bibliotheek zoals Python's lxml die aparte API's biedt voor bewerking.
Wat betekent de dubbele schuine streep (//) in XPath?
De dubbele schuine streep is een afkorting voor de descendant-or-self-as. De expressie //title betekent: "selecteer alle title-elementen overal in de documentboom, op elke diepte." Ze is gelijkwaardig aan de volledige vorm /descendant-or-self::node()/title. // aan het begin van een expressie doorzoekt het volledige document; in het midden van een pad (zoals /catalog//title) doorzoekt het nakomelingen van een specifiek knooppunt.
Hoe selecteer ik tekstinhoud in plaats van het elementknooppunt?
Voeg /text() toe aan uw expressie. //book/title/text() retourneert bijvoorbeeld de tekstinhoud van elk title-element als een tekenreeksknooppunt in plaats van het elementknooppunt zelf. In code kunt u ook .textContent opvragen op het geretourneerde elementknooppunt zonder text() te gebruiken.
Is XPath sneller dan CSS-selectors voor het bevragen van XML?
CSS-selectors zijn geoptimaliseerd voor HTML en DOM-traversal in browsers. XPath is expressiever: het ondersteunt het doorlopen van bovenliggende elementen, sibling-assen, numerieke predikaten en ingebouwde functies die CSS-selectors niet kunnen uitdrukken. Voor HTML zijn CSS-selectors (querySelector) doorgaans sneller. Voor XML bieden de meeste server-side bibliotheken alleen XPath aan — CSS-selectors zijn daar überhaupt geen optie.