Zum Inhalt springen

XSL Template Aufrufe rekursiv zählen


Empfohlene Beiträge

Hallo,

ich habe in XSLT 2.0 folgendes Template:


<xsl:template name="item">

<xsl:text>?? test</xsl:text>

</xsl:template>

dazu noch passende Template Matches

<xsl:template match="node1"

<xsl:call-template name="item"/>

</xsl:template>


<xsl:template match="node2"

<xsl:call-template name="item"/>

</xsl:template>

Dazu noch eine XML

<node1>

</node1>


<node1>

    <node2>

         <node1/>

     </node2>

</node1

Was ich nun an der Stelle des ?? in dem ersten Template benötige, ist die Rekursionstiefe, wie oft mein Template item

in sich selbst aufgerufen wurde, d.h. beim Bsp 1 wäre die Rekursionstiefe 1 und beim zweiten 3.

Was ich nicht machen kann dem item Template einen Parameter mit geben, so dass ich bei jeden call-template den Zähler inkrementiere.

Wie kann ich die Anzahl der rekursiven Aufrufe eines Templates erhalten?

Danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

hast Du eine Möglichkeit in das Template einen Counter zu integrieren, der den Zähler z.B. in einem File speichert bzw. auch daraus liest?

Ein counter wird hier IMHO nicht funktionieren, denn ich will ja nicht die Anzahl der Nodes ermitteln (wobei sich das count nur auf die Nodes des XML Baums bezieht), sondern ich will ja die Rekursionstiefe des Templates feststellen z.B.


    <node1>

       <node2/>

    </node1>

dazu dann

<xsl:template match="node2">

    <xsl:call-template name="sub">

          <xsl:with-param select="x">


                <xsl:call-template name="item">

                    <xsl:with-param select="v">

                        <xsl:value-of select="."/>

                    </xsl:with-param>

                </xsl:call-template>


          </xsl:with-param>

    </xsl:call-template>

</xsl:template>


<xsl:template match="sub">

     <xsl:param value="x/>


    <xsl:call-template name="item">

         <xsl:with-param select="v">

             <xsl:value-of select="$x"/>

         </xsl:with-param>

    </xsl:call-template>


</xsl:template>


<xsl:template match="item">

     <xsl:param value="v/>

     <xsl:text>v</xsl:text>

</xsl:template>

In diesem Fall würde der counter 0 liefern, denn die Kinder der Node 2 existieren sind, hier müsste aber 2 geliefert werden, denn aufgrund des ersten call templates in node2-Match würde das item-Template aufgerufen (+1) und dann aus dem sub-Template ebenfalls (+1), d.h. innerhalb des sub-Templates müsste eine 2 in item vorhanden sein.

Da die Rekursionstiefe nicht von dem eingegebenen XML Baum abhängig ist, sondern von den konkreten Aufrufen der XSL Knoten muss das Template seine eigene Rekursionstiefe bestimmen können. Der Counter arbeitet auf den Nodes des XML Baumes, ich kann nicht aufgrund des XML Baumes die Rekursionstiefe effizient ermitteln (bzw. dies wäre zu umständlich, da ich jeden möglichen Fall betrachten muss, was das Problem dann ggf NP-schwer macht)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie sieht es denn damit aus, die Templates vor der Ausgabe zu parsen und anhand von Schlüssenwörtern so die Tiefe zu ermitteln?

siehe unten !

Es ist nicht relevant wie die Template anhand der Deklaration verschachtelt sind, sondern wie sich die konkret dynamisch erzeugte Nodestruktur anhand der Eingabedaten ergibt. Ich benötige den dynamisch erzeugten Baum, der sich aus XML & XSL ergibt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...