Discussion:
XSL und Zähler pro Element
(zu alt für eine Antwort)
Rainer Hahnekamp
2005-09-14 21:09:39 UTC
Permalink
Hallo allerseits,

ich habe hier ein XSLT Stylesheet, in welchem ich eine Tabelle zusammenbaue.
Jetzt soll es aber so sein, dass jede Zeile in der ersten Spalte automatisch
eine fortlaufende Nummer hat. Habs schon mit xsl:variable und xsl:param
probiert, funktioniert aber nicht.

vereinfachtes Beispiel wobei counter die Zählervariable ist:
<xsl:variable name="counter" select="1" />
<xsl:for-each select="node">
<tr><td><xsl:value-of select="$counter" /></td></tr>
<xsl:variable name="counter" select="$counter+1" />
</xsl:for-each>

Hoffe mir kann jemand helfen.

Vielen Dank im Voraus
maalej
2005-09-15 07:26:31 UTC
Permalink
Post by Rainer Hahnekamp
Hallo allerseits,
ich habe hier ein XSLT Stylesheet, in welchem ich eine Tabelle zusammenbaue.
Jetzt soll es aber so sein, dass jede Zeile in der ersten Spalte automatisch
eine fortlaufende Nummer hat. Habs schon mit xsl:variable und xsl:param
probiert, funktioniert aber nicht.
<xsl:variable name="counter" select="1" />
<xsl:for-each select="node">
<tr><td><xsl:value-of select="$counter" /></td></tr>
<xsl:variable name="counter" select="$counter+1" />
</xsl:for-each>
Hoffe mir kann jemand helfen.
Vielen Dank im Voraus
definiere eine variable die der nummer 1 hat , für die erste zeile und
wenn du zu den nächsten zeile gehst, übergibst du die variable mit und
incremetierst du sie,

am besten wenn du uns zeigst wie du die tabelle aufbaust, dann können
wir dich weiter helfen:-)

ciao
Maalej
Andreas Kraftl
2005-09-16 05:31:19 UTC
Permalink
Post by Rainer Hahnekamp
ich habe hier ein XSLT Stylesheet, in welchem ich eine Tabelle zusammenbaue.
Jetzt soll es aber so sein, dass jede Zeile in der ersten Spalte automatisch
eine fortlaufende Nummer hat. Habs schon mit xsl:variable und xsl:param
probiert, funktioniert aber nicht.
<xsl:variable name="counter" select="1" />
<xsl:for-each select="node">
<tr><td><xsl:value-of select="$counter" /></td></tr>
<xsl:variable name="counter" select="$counter+1" />
</xsl:for-each>
Eventuell hilft ein <xsl:value-of select="position()"/>

Ansonsten brauchst Du ein sich selbst aufrufendes named template.
http://www-128.ibm.com/developerworks/xml/library/x-tiploop.html?ca=dnt-626

Gruß
Andreas
--
Kraftl EDV - Dienstleistungen
Linux, Schulungen, Webprogrammierung, Webdesign
Telefon: +43(0)676/3533220
E-mail: ***@kraftl.at, Homepage: http://www.kraftl.at/
Chameleon
2005-09-16 10:21:35 UTC
Permalink
Das Problem ist folgendes:
Variablen- und Parameter sind in XSLT nicht mit denen anderer
Programmiersprachen zu vergleichen. Es handelt sich eher um Konstanten.
D.h. innerhalb eines Templates kann man den Inhalt nicht verändern.
Wenn man aber ein Named-Template mit Parameter hat, kann sich dieses
rekursiv selber aufrufen und so die Variable "hochzählen". Etwa in der
Form:

<xsl:template name="xyz">
<xsl:param name="i">
<!-- do something with $i -->
<xsl:value-of select="$i"/>
...
<!-- Rekursion starten -->
<xsl:call-template name="xyz">
<xsl:with-param name="i" select="$i+1"/>
<xsl:call-template>
</xsl:template>

Aber Vorsicht. Irgendwo muss ein Abbruch-Kriterium vorhanden sein.
Sonst baut man eine sich endlos selbstaufrufendes Template.

Hoffe das hilft etwas weiter.

Gruß
Christian

Loading...