C#.NET * C++ * JAVASCRIPT * PYTHON * DIVERSES
XML * XML-SCHEMA * XPATH * XSL * XSL-FO * SVG * XQUERY * XPROC * ANT



XPath / 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.

Auf dieser Seite:

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 und , zusätzlich ergänzt um die Funktionen und .

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 und für ein anderes XML-Input-Dokument ähnlich:


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

Lösung in XPath 3.0


./descendant-or-self::info 
  => for-each(
    function($w){
      $w/ancestor-or-self::info => count() 
    }
  )  
  => max()

wg / 14. März 2021



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