XPath 3.0, XPath 2.0, XPath 1.0 / XPath-Funktionen / XPath: Sequenz-Funktionen / XPath 3.0: path

XPath 3.0: path

XPath 3.0: path

➪ Die XPath-Funktion path() gibt den XPath-Pfad eines Nodes zurück.

In XSLT 1.0, aber auch in XSLT 2.0 bedarf es eigener Logik, um den XPath-Pfad zu einem beliebigen Element bzw. Attribut automatisch zu ermitteln. In XPath 3.0 steht nun die path()-Funktion zur Verfügung.

Nehmen Sie an, aus dem folgenden XML-Dokument sollen die XPath-Pfade zu sämtlichen ns4:Kauf-Elementen ermittelt werden.


<ns1:Orte 
    xmlns:ns1="www.wilfried-grupe.de/Orte/2018" 
    xmlns:ns2="www.wilfried-grupe.de/Ort"
    xmlns:ns3="www.wilfried-grupe.de/Mensch" 
    xmlns:ns4="www.wilfried-grupe.de/Kauf">
    <ns2:Ort>
        <id>1</id>
        <name>Neustadt</name>
        <ns3:Mensch>
            <id>1</id>
            <name>Holzflos</name>
            <vorname>Hugo</vorname>
            <Gehalt>234.56</Gehalt>
            <idOrt>1</idOrt>
            <ns4:Kauf>
                <idMensch>1</idMensch>
                <anzahl>3</anzahl>
                <bez>Hemd</bez>
                <preis>12.99</preis>
                <Gesamt>38.97</Gesamt>
            </ns4:Kauf>
        </ns3:Mensch>
    </ns2:Ort>
</ns1:Orte>

In XSLT 3.0 gelingt das einfach mit:


<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:ns4="www.wilfried-grupe.de/Kauf"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    exclude-result-prefixes="xs ns4" version="3.0">
    <xsl:template match="/">
        <erg>
            <xsl:for-each select="//ns4:Kauf">
                <path>
                    <xsl:value-of select="path(.)"/>
                </path>
            </xsl:for-each>
        </erg>
    </xsl:template>
</xsl:stylesheet>

In XQuery sieht der Aufruf dagegen so aus:


declare namespace ns4="www.wilfried-grupe.de/Kauf";
<erg>
{
for $k in //ns4:Kauf return
<path>{path($k)}</path>
}
</erg>

Sowohl XSLT als auch XQuery liefern dasselbe Ergebnis.


<erg>
   <path>
     /Q{www.wilfried-grupe.de/Orte/2017}Orte[1]/
        Q{www.wilfried-grupe.de/Ort}Ort[1]/
          Q{www.wilfried-grupe.de/Mensch}Mensch[1]
           /Q{www.wilfried-grupe.de/Kauf}Kauf[1]</path>
</erg>

wg / 4. April 2018



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.






Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/XPath_path.html