Veröffentlicht 26. Februar 201312 j 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
27. Februar 201312 j Servus, 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?
27. Februar 201312 j Autor 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)
27. Februar 201312 j Wie sieht es denn damit aus, die Templates vor der Ausgabe zu parsen und anhand von Schlüssenwörtern so die Tiefe zu ermitteln?
27. Februar 201312 j Autor 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.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.