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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow