XPath 3.0, XPath 2.0, XPath 1.0 / XPath-Achsen / Verschachtelungstiefe

Verschachtelungstiefe

Verschachtelungstiefe

➪ Um eine maximale Verschachtelungstiefe ermitteln zu können, ist eine kombinierte Anwendung von descendant-or-self und ancestor-or-self 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 der info Elemente 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="/">
 <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>

Ermittlung der Verschachtelungstiefe in XQuery

In XQuery liest sich der Aufruf der XPath-Achsen descendant-or-self und ancestor-or-self für ein anderes XML-Input-Dokument ähnlich:


<erg>
{
  max(
    for $vch in ./descendant-or-self::* 
    return 
    count($vch/ancestor-or-self::*)
    )
}
</erg>

wg / 15. September 2018



Fragen? Anmerkungen? Tips?

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_Achsen10.html