Christoph Schütte: Zählschleife

Hallo.

Leider gibt es in XSL nunmal keine Zählschleife ( for i:=1..n ), sondern nur Schleifen auf Knoten (xsl:for-each). Allerdings gibt es laut unten aufgeführtem altem Forumseintrag einen Work-around. Das aufgeführte Beispiel existiert jedoch nicht mehr.

Kennt vielleicht noch jemand den Lösungsweg oder hat eine adequate andere Lösung parat ?

Vielen Dank im Vorraus
Christoph

=================

Die folgende Nachricht zum Thema stammt von: Thomas J.S.,  thomas.js@selfhtml.org, 05. August 2002, 23:53 Uhr

hallo,

Wir sind nun seit knapp einer Stunde mit der Suche nach einer Zählschleifenimplementierung in XSL beschäftigt. Gemeint ist *nicht* die xsl:for-each Schleife, sondern ein Äquivalent zur PHP (...) - Schleife á la "for ($i=0; $i < MAXVALUE; $i++) { (...) }".

gibts nicht. in xsl gibt es keine hochzählung in diesem sinne, also keine "for" oder "while" schleifen.

Gibt es in XSL da einen Workaround? Many thanks in advance!

ja, das gibt es allerdings. recursive aufrufe mit parametes.
eine wurde gerade unter:
http://forum.de.selfhtml.org/?m=108222&t=19249
beschrieben.

Grüße
Thomas

  1. Hallo Christoph,

    Kennt vielleicht noch jemand den Lösungsweg oder hat eine adequate andere Lösung parat ?

    Rekursion ist der richtige Weg:

    <?xml version="1.0" encoding="iso-8859-1"?>

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <!-- aufruf der schleife -->

    <xsl:template match="/">
        <xsl:call-template name="fori">
          <xsl:with-param name="myCounter" select="0"/>
        </xsl:call-template>
      </xsl:template>

    <xsl:template name="fori">
        <xsl:param name="myCounter"/>

    <!-- hochzaehlen für naechsten durchlauf -->
        <xsl:variable name="mbCounter" select="$myCounter + 1"/>

    <!-- ausgabe -->
        <xsl:number value="$mbCounter" format="1 "/>
        <xsl:if test="$mbCounter < 5"><!-- bis 5 -->

    <!-- naechster(leider rekursiver) aufruf mit $myCounter+1 -->
          <xsl:call-template name="fori">
            <xsl:with-param name="myCounter" select="$mbCounter"/>
          </xsl:call-template>

    </xsl:if>

    </xsl:template>

    </xsl:stylesheet>

    Gruß
    Franz