Ich habe ein XSLT-Skript, mit dem ich bei jedem Aufruf einer Vorlage eine fortlaufende Nummerierung vornehmen möchte. Also eine sehr verkürzte Version davon sieht ein bisschen wie:
<xsl:call-template name="insertHeader" />
<xsl:for-each ...>
<xsl:call-template name="insertHeader" />
...
</xsl:for-each>
<xsl:call-template name="insertHeader" />
<xsl:template name="insertHeader>
This is item number <xsl:value-of select="$numberOfInvocations />
</xsl:template>
So offensichtlich, dass $numberOfInvocations Sache nicht funktioniert, und in XSLT können Sie nicht eine globale Zähler-Variable, die wie ein offensichtlicher Ansatz in einer prozeduralen Sprache scheinen würde inkrementieren. Ich möchte, dass beim ersten Aufruf der Vorlage die Zahl 1 ausgegeben wird, beim zweiten Aufruf die Zahl 2, usw. Wie soll ich das anstellen? Ist dies in XSLT auch nur annähernd möglich?
Danke :)
Edit: Es gab also einige Kommentare, dass dies nicht klar genug definiert ist. Ich möchte eine Reihe von Tabellen in der (HTML-)Ausgabe beschriften. Die naheliegendste Möglichkeit, dies zu tun, ist der Aufruf einer Funktion (Sie können wahrscheinlich erkennen, dass ich hier kein XSLT-Assistent bin), die die Zahl jedes Mal automatisch hochzählt. Ich denke, der Grund, warum dies so schwierig erscheint, liegt darin, dass es die XSLT selbst ist, die definiert, wo diese Tabellen erscheinen, und nicht die Eingabe.
Diese zusätzlichen Informationen sind vielleicht nicht so nützlich, da Dimitres Antwort eher so klingt, als würde das nie funktionieren. Trotzdem danke :)
1 Stimmen
Wie Sie geschrieben haben, bedeutet Variable im deklarativen Paradigma nicht dasselbe. Sie müssen (und können es meistens auch) die Logik hinter dieser Zahl erklären. Wenn Sie gesperrt sind, geben Sie bitte ein Eingabebeispiel und die gewünschte Ausgabe an, damit wir Ihnen helfen können.
0 Stimmen
Gute Frage (+1). In meiner Antwort finden Sie eine ausführliche Erklärung.