Home
Über mich
Blog
Veröffentlichungen
IT-Trainings
Impressum


ancestor-or-self::*

ancestor-or-self::* gibt uns eine Nodeliste aller vorhergehender Knoten bis zum Root-element, und zwar in der Reihenfolge, daß der Rootnode zuerst ausgegeben wird.

<xsl:template name="Pfadedemo">
 <xsl:for-each 
    select="/Orte/Ort[2]/Mensch[3]/ancestor-or-self::*">
<xsl:text>
</xsl:text>
   <xsl:call-template name="generateXPath"/>
 </xsl:for-each>
</xsl:template>

Das Resultat lautet dann:

/Orte
/Orte/Ort[2]
/Orte/Ort[2]/Mensch[3]

Ermittlung der Verschachtelungstiefe

Eine kombinierte Anwendung von descendant-or-self und ancestor-or-self ist bei der folgenden Aufgabenstellung sinnvoll. Aus dem XML Input Dokument

<info ebene="1">
 <info ebene="2">
  <info ebene="3"/>
 </info>
 <info ebene="2">
  <info ebene="3">
   <info ebene="4">
    <info ebene="5"/>
   </info>
  </info>
 </info>
</info>

soll die maximale Tiefe der Verschachtelung ermittelt werden, die im obigen Fall zum besseren Verständnis im Attribut "ebene" angegeben ist. Erwartet wird hier also eine maximale Verschachtelungstiefe von 5.

Eine mögliche Lösung liegt in der angekündigten kombinierten Verwendung von descendant-or-self und ancestor-or-self, zusätzlich ergänzt um die Funktionen max und count. Die innere Schleife "for $vch in ... " gibt mehrere Einzelinformationen über die Tiefe der jeweiligen Verschachtelung zurück ("count($vch/ancestor-or-self::info)"); von diesen Einzelwerten übernimmt die max-Funktion den Maximalwert.

 <xsl:template match="/" name="xsl:initial-template">
  <Info>
   <xsl:value-of 
        select="max(
                    for $vch in ./descendant-or-self::info 
                    return 
                    count($vch/ancestor-or-self::info)
                    )"/>
  </Info>
 </xsl:template>

Das Ergebnis ist nachvollziehbar:

<Info>5</Info>

qrpic/XPath_Achsen8.jpg

wg / 14. Oktober 2017




Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf (info10@wilfried-grupe.de).



Vielen Dank für Ihr Interesse an meiner Arbeit.


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

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