"for-schleife" möglich?

- xsl
0 lulu0 MudGuard
0 Robert Bienert0 MudGuard
0 Thomas J.S.0 MudGuard
0 Daniel Thoma0 MudGuard
Hi,
ich muß an verschiedenen Stellen ein Template aufrufen mit dem laufenden Jahr, dem Jahr davor, zwei Jahre davor, drei Jahre davor usw., also mit 2007, 2006, 2005, usw. - wobei die Anzahl der Template-Aufrufe an den verschiedenen Stellen unterschiedlich ist.
Bisher habe ich sowas:
<xsl:variable name="currentyear" select="substring(TODAY,1,4)"/>
<xsl:apply-templates select="element">
<xsl:with-param name="year" select="$currentyear"/>
</xsl:apply-templates>
<xsl:apply-templates select="element">
<xsl:with-param name="year" select="$currentyear - 1"/>
</xsl:apply-templates>
<xsl:apply-templates select="element">
<xsl:with-param name="year" select="$currentyear - 2"/>
</xsl:apply-templates>
Das funktioniert zwar, gefällt mir aber nicht. Bei nur 3 zu berücksichtigenden Jahren geht's ja noch, aber teilweise sind es erheblich mehr.
Mir fällt als Lösungsmöglichkeit nur ein Template ein, das sich rekursiv aufruft und 2 Parameter bekommt: das Jahr, das bearbeitet werden soll (welches immer um 1 verringert wird bei der Übergabe für den Selbstaufruf), und das, das als letztes bearbeitet werden soll (welches nur durchgereicht wird).
Gefällt mir aber auch nicht richtig ...
Gibt's was schöneres?
cu,
Andreas
Hi Andreas,
Gibt's was schöneres?
da fällt mir nur ein Beispiel im Buch XSLT von Doug Tidwell ein.
Er emuliert quasi eine for-Schleife.
http://www.oreilly.com/catalog/xslt/
Die Beispiele zum Buch findest Du dort
http://examples.oreilly.com/xslt/
Chapter4/for-loop.xsl
Chapter4/for-loop-template.xml
Ob das mit ohne Buch nachvollziehbar ist weiß ich nicht, probier halt mal.
Viele Grüße
lulu
Hi,
Gibt's was schöneres?
da fällt mir nur ein Beispiel im Buch XSLT von Doug Tidwell ein.
Welches ein rekursives Template (wie von mir beschrieben) einsetzt - also nichts neues ...
Trotzdem Danke.
cu,
Andreas
Moin!
Mir fällt als Lösungsmöglichkeit nur ein Template ein, das sich rekursiv aufruft […]
Gefällt mir aber auch nicht richtig ...
Du magst keine funktionale Programmierung? Dann wird es schwierig, sich mit XSLT zu einigen, schließlich ist dies eine (mMn sogar recht gute) funktionale Programmiersprache, deshalb gibt es kein for und auch Variablenzuweisung sind deshalb so „komisch“ bzw. unmöglich.
Viele Grüße,
Robert
Hi,
Mir fällt als Lösungsmöglichkeit nur ein Template ein, das sich rekursiv aufruft […]
Gefällt mir aber auch nicht richtig ...
Du magst keine funktionale Programmierung?
Naja, ich find Rekursion anstelle einer einfachen Iteration nicht so toll ...
cu,
Andreas
Hallo,
Das funktioniert zwar, gefällt mir aber nicht. [...]
Mir fällt als Lösungsmöglichkeit nur ein Template ein, das sich rekursiv aufruft [...]
Gefällt mir aber auch nicht richtig ...Gibt's was schöneres?
Urlaub auf Hawai? ;-)
Nun im ernst: nein, das sind so ziemlich die zwei Möglichkeiten.
Grüße
Thomas
Hi,
Das funktioniert zwar, gefällt mir aber nicht. [...]
Mir fällt als Lösungsmöglichkeit nur ein Template ein, das sich rekursiv aufruft [...]
Gefällt mir aber auch nicht richtig ...Gibt's was schöneres?
Urlaub auf Hawai? ;-)
Ok, das wäre schöner, erfüllt aber nicht den gewünschten Zweck ...
Nun im ernst: nein, das sind so ziemlich die zwei Möglichkeiten.
Sch...ade.
cu,
Andreas
Hallo MudGuard,
In XSLT und XPATH 2.0 gibt es Sequences, du könntest also sowas machen:
<for-each select="$fromyear TO $toyear">
...
</for-each>
Iterieren über eine Sequenz wäre auch typischerweise die elegante Lösung in funktionalen Sprachen. Rekursion ist für sowas doch eher etwas umständlich.
XSLT 1.0 ist da an einigen Stellen noch etwas sperrig.
Grüße
Daniel
Hi,
In XSLT und XPATH 2.0 gibt es Sequences, du könntest also sowas machen:
<for-each select="$fromyear TO $toyear">
...
</for-each>
Das klingt interessant.
Muß ich mal gucken, ob die verwendeten Tools das unterstützen ...
> Iterieren über eine Sequenz wäre auch typischerweise die elegante Lösung in funktionalen Sprachen. Rekursion ist für sowas doch eher etwas umständlich.
Eben, das stört mich ja auch ...
cu,
Andreas
--
[Warum nennt sich Andreas hier MudGuard?](http://MudGuard.de/)
[Schreinerei Waechter](http://www.schreinerei-waechter.de/)
[O o ostern ...](http://ostereier.andreas-waechter.de/)
Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
Hallo,
In XSLT und XPATH 2.0 gibt es Sequences, du könntest also sowas machen:
<for-each select="$fromyear TO $toyear">
...
</for-each>
>
> Das klingt interessant.
> Muß ich mal gucken, ob die verwendeten Tools das unterstützen ...
Deswegen habe ich es erst gar nicht vorgeschlagen. Da (in XSLT 2) könntest du auch "einfach" eine eigene Funktion (in der man auch Templates etc. definieren kann) dafür schreiben und sie dann entsprechend aufrufen.
Grüße
Thomas