XPath Akser (Aks)

XML-instansdokument

Vi vil bruge dette XML-dokument i nedenstående eksempel:

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>
<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>
</bookstore>

XPath-aksel

En aksel kan defineres som en nodemængde i forhold til den aktuelle node.

Aksenavn Resultat
ancestor Vælg alle forfædre (far, oldefar osv.).
ancestor-or-self Vælg alle forfædre (far, oldefar osv.) og den aktuelle node selv.
attribute Vælg alle egenskaber til den aktuelle node.
child Vælg alle underelementer til den aktuelle node.
descendant Vælg alle efterkommerelementer (søn, oldebarn osv.).
descendant-or-self Vælg alle efterkommerelementer (søn, oldebarn osv.) og den aktuelle node selv.
following Vælg alle noder efter den aktuelle nodes slutetiket i dokumentet.
namespace Vælg alle namespace-noder for den aktuelle node.
parent Vælg den aktuelle nodes forældernode.
preceding Vælg alle noder før den aktuelle nodes startetiket i dokumentet.
preceding-sibling Vælg alle samtidige noder før den aktuelle node.
self Vælg den aktuelle node.

Stiplaceringsekspression

Stiplacering kan være enten absolut eller relativ.

Den absolute sti starter med en ret vinkelstreg ( / ), mens den relative sti ikke gør det. I begge tilfælde inkluderer stiplaceringen en eller flere trin, der hver især er adskilt af en skråstreg:

Absolut positionspat

/step/step/...

Relativ positionspat

step/step/...

Hvert trin beregnes baseret på noderne i den aktuelle nodestream.

Trin (step) inkluderer:

Aks (axis)
Definer trærelationen mellem den valgte node og den aktuelle node
Nodetest (node-test)
Identificer noder inden for en aks
Ingen eller flere udsagn (predicate)
Dypere filtrering af den valgte nodestream

Syntaks for trin:

Aksnavn::nodetest[udsagn]

Eksempel

Eksempel Resultat
child::book Vælg alle book-noder, der tilhører de underelementer, der tilhører den aktuelle node.
attribute::lang Vælg den aktuelle nodes lang-egenskab.
child::* Vælg alle underelementer til den aktuelle node.
attribute::* Vælg alle egenskaber til den aktuelle node.
child::text() Vælg alle tekst-undernoder til den aktuelle node.
child::node() Vælg alle undernoder til den aktuelle node.
descendant::book Vælg alle book-afkom til den aktuelle node.
ancestor::book Vælg alle book-ancestorer til den aktuelle node.
ancestor-or-self::book Vælg alle book-ancestorer og den aktuelle node (hvis denne node er en book-node)
child::*/child::price Vælg alle price-barnnoder til den aktuelle node.