xpath
Locatiepaden en assen
Zoeken…
Opmerkingen
Een XPath- locatiepad is een reeks locatiestappen gescheiden door een /
-teken:
step1/step2/step3
Een locatiestap bevat een as , een knooppunttest en een optionele lijst met predicaten . De as en de knooppunttest worden gescheiden door twee dubbele punten ::
De predikaten staan tussen vierkante haken:
axis::nodeTest[predicate1][predicate2]
De evaluatie van een locatiepad begint met een knooppuntset die het contextknooppunt bevat, gegeven door de context van de uitdrukking, of het rootknooppunt , als het locatiepad begint met een /
. Bij elke stap wordt elk knooppunt N in het oorspronkelijke hoofdknooppuntverzamelingscluster vervangen door de set knopen die
- kan worden bereikt vanaf N volgens de gegeven as ,
- komt overeen met de knooppunttest , en
- komt overeen met alle predikaten .
Het resultaat van een locatiepadexpressie is de uiteindelijke knooppuntset verkregen na het verwerken van alle locatiestappen .
Onderliggende kindelementen
Met behulp van de child
as van het basisknooppunt naar een afstammend element gaan:
/child::html/child::body/child::div/child::span
Omdat de child
as de standaardas is, kan deze worden afgekort tot:
/html/body/div/span
Alle afstammelingen doorkruisen
De descendant
en descendant-or-self
kunnen worden gebruikt om alle afstammingselementen van een knooppunt op elke diepte te vinden. In tegenstelling, het child
as doorloopt alleen directe kinderen.
/child::html/descendant::span
/child::html/descendant-or-self::*
De dubbele schuine streep //
is een snelkoppeling voor /descendant-or-self::node()/
. De volgende uitdrukkingen zijn dus equivalent:
table//td
child::table/descendant-or-self::node()/child::td
child::table/descendant::td
table/descendant::td
Voorouders oversteken
De parent
as bevat alleen het bovenliggende van een knooppunt. De volgende expressie selecteert het html
element door een omweg te maken over het body
:
/child::html/child::body/parent::html
..
is een snelkoppeling voor parent::node()
De ancestor
en ancestor-or-self
assen doorkruisen alle voorouders van een knooppunt. De volgende expressie retourneert alle div
elementen die voorouders zijn van het contextknooppunt:
ancestor::div
De "zelf" -as
De self
as bevat de context knooppunt zelf. De uitdrukking .
is een snelkoppeling voor self::node()
en komt altijd overeen met het contextknooppunt. De .
snelkoppeling is handig voor het opsommen van afstammelingen van het contextknooppunt. De volgende uitdrukkingen zijn equivalent:
.//span
self::node()/descendant-or-self::node()/child::span
descendant::span
De self
as kan nuttig zijn bij het XPath 1.0 predikaten. Om bijvoorbeeld alle h1
, h2
en h3
kinderen van het contextknooppunt te selecteren:
*[self::h1 or self::h2 or self::h3]
Volgende en voorgaande knooppunten doorlopen
De assen van following-sibling
en preceding-sibling
bevatten de broers en zussen voor of na het contextknooppunt, en de following
en preceding
assen bevatten alle knooppunten in het document vóór of na het contextknooppunt, maar:
- Geen van deze assen bevatten kenmerk- of naamruimteknooppunten.
- De
following
as bevat geen afstammelingen. - De
preceding
as bevat geen voorouders.
Voorbeelden:
following::span[1]
following-sibling::*[last()]
Doorkruisen van kenmerk- en naamruimteknooppunten
De assen van het attribute
en de namespace
bevatten alle knooppunten van het kenmerk en de naamruimte van een element. De sneltoets @
staat voor attribute::
, dus het volgende is equivalent:
child::div/attribute::class
div/@class