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
followingas bevat geen afstammelingen. - De
precedingas 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