XPath-tester
XML- of HTML-document
Plak XML of HTML met maximaal 1.000.000 tekens. De evaluatie gebeurt in deze browser met XPath 1.0.
Een absolute of relatieve XPath 1.0-expressie. Prefixen die in het document zijn gedeclareerd, worden automatisch geregistreerd; een standaardnamespace is beschikbaar onder het prefix d.
XPath schrijven voor scraping of XSLT is gokken en bijstellen zonder live proefomgeving. Deze tester neemt je XML of HTML in het ene vak en je expressie in het andere, evalueert XPath 1.0 met de engine van je eigen browser en toont elke gevonden node met soort, attributen, tekstinhoud en geserialiseerde markup. Scalaire expressies zoals count(//book) geven hun waarde direct terug, en namespace-prefixen die in het document zijn gedeclareerd worden automatisch voor je geregistreerd. Alles draait in je browser: het document wordt nooit geüpload.
Zo test je een XPath-expressie
-
1
Plak XML of HTML
De automatische detectie schakelt over op soepel HTML-parsen zodra ze een HTML-doctype of -root ziet; je kunt de XML- of HTML-modus ook afdwingen.
-
2
Voer je XPath in
Absoluut (`/library/book`) of relatief (`//div[@class='card']`), elke XPath 1.0-expressie.
-
3
Evalueer
De XPath-engine van je browser voert de query lokaal uit; er wordt niets naar een server gestuurd.
-
4
Bekijk de resultaten
Elke match toont de soort node, de attributen, de ingekorte tekst en de geserialiseerde markup; er worden maximaal 200 matches getoond.
De basis van XPath 1.0
| Expressie | Wat het selecteert |
|---|---|
/books/book |
<book>-kinderen van de root <books> |
//book |
Elke <book> waar dan ook in het document |
//book[@id='42'] |
<book> met id-attribuut gelijk aan 42 |
//book[1] |
Eerste <book> per ouder (niet van het document) |
(//book)[1] |
Eerste <book> in het hele document |
//book[title='1984'] |
<book> waarvan de <title>-tekst “1984” is |
//book/@id |
id-attributen van alle <book>-elementen |
//book[position() > 1] |
Alle <book> behalve de eerste |
//book[last()] |
Laatste <book> per ouder |
Scalaire expressies werken ook: count(//book) geeft een getal terug, string(//title) een tekenreeks en boolean(//book[@id]) waar of onwaar. De tester toont die waarden direct in plaats van een lijst met nodes.
Veelgebruikte assen naast child
ancestor::, alle vooroudersfollowing-sibling::, broers en zussen na de huidige nodepreceding-sibling::, broers en zussen ervoordescendant::, alle nakomelingenattribute::(afkorting@), attributen van de huidige nodeparent::(afkorting..), het ouderelement
Eigenaardigheden van HTML
HTML is geen strikte XML, dus de tester parst het soepel met de HTML-parser van je browser in plaats van de strikte XML-parser. De HTML-modus wordt automatisch gedetecteerd via <!DOCTYPE html> of een <html>-root, en met de keuze voor de documentmodus kun je elk van beide modi afdwingen. In HTML-modus worden tag- en attribuutnamen in kleine letters gezet, schrijf je XPath dus in kleine letters: //div[@class], niet //DIV[@CLASS].
Namespaces
XML met namespaces vereist geregistreerde prefixen:
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/">
<item>
<content:encoded>...</content:encoded>
</item>
</rss>
De tester doorzoekt het document op xmlns-declaraties en registreert elk prefix automatisch, dus //content:encoded werkt meteen. Een standaardnamespace (een kale xmlns="...") heeft geen prefix in het document, dus de tester koppelt die aan het prefix d: selecteer <item>-elementen in een feed met standaardnamespace via //d:item. De geregistreerde namespaces staan naast de resultaten.
Wat deze tester niet evalueert
Browsers evalueren XPath 1.0, hetzelfde dialect dat de meeste scraping-stacks gebruiken. Functies uit XPath 2.0 en later, zoals matches(string, regex), tokenize(string, delimiter), for ... return-expressies en sequentie-operatoren, horen daar niet bij; je vindt ze in XSLT 2.0/3.0-toolchains. XPath 1.0 blijft de meest portabele keuze voor webscraping.
Testtips
- Begin breed en versmal. Eerst
//div, dan//div[@class], dan de specifieke class-waarde. - Controleer de namespace-declaraties. De meeste “waarom geeft mijn XPath niets terug?”-bugs zijn namespaces; kijk in de lijst met geregistreerde namespaces.
- Let op hoofdletters. XML is hoofdlettergevoelig. De HTML-modus zet namen in kleine letters.
- Test string() bij het uitpakken van tekst.
//p/text()enstring(//p)verschillen zodra er geneste markup is.
Veelgestelde vragen
Nee, alleen XPath. De meeste browsers ondersteunen beide via document.querySelectorAll (CSS) en document.evaluate (XPath). Gebruik wat voor de taak het duidelijkst is.
Bij het parsen van HTML worden tag- en attribuutnamen in kleine letters gezet. Zorg dat je XPath kleine letters gebruikt: //div[@class], niet //DIV[@CLASS]. Controleer ook de modus: XML afdwingen op slordige HTML mislukt met een parsefout, terwijl de HTML-modus het soepel parst.
Prefixen die in het document zijn gedeclareerd worden automatisch geregistreerd voor je expressie. Een standaardnamespace wordt gekoppeld aan het prefix d, dus //d:item selecteert <item>-elementen in een document met standaardnamespace. De actieve koppelingen staan bij de resultaten.
Nee. Het document en de expressie worden geëvalueerd door de XPath-engine van je eigen browser en worden niet naar onze server gestuurd, niet opgeslagen en niet aan het paginaadres toegevoegd; ze bestaan alleen in deze browsersessie zodat de weergave met meerdere stappen je resultaten kan tonen.
Gerelateerde tools
ASCII-tabelreferentie
Volledige ASCII-tabel van 0 tot 127 met decimale, hexadecimale, octale en binaire waarden en HTML-numerieke referentienotatie, inclusief control codes zoals NUL, LF en DEL.
HTML-tekenreferentie
Een doorzoekbare lijst met HTML-entiteiten, hun benoemde en numerieke codes, plus kopiëren met één klik voor speciale tekens en symbolen.
Sneltoetsenoverzicht
Zoek gedocumenteerde standaardsneltoetsen voor VS Code, Chrome en Bash met GNU Readline op macOS, Windows en Linux.
HAR-bestandsviewer
Open HAR-netwerkopnamen lokaal, filter verzoeken, bekijk gemaskeerde headers en timing en exporteer opgeschoonde samenvattingen zonder upload.
ASCII naar binair-converter
Converteer elke ASCII-string naar zijn binaire representatie. Elk teken wordt acht bits, gescheiden door spaties, klaar voor protocoltrace of huiswerk.
Binair naar hex-converter
Converteer binaire invoer naar een gewone hexwaarde in hoofdletters. Niet-binaire tekens worden genegeerd en voorloopnullen blijven niet behouden.