Thomas J.S.: Glob.Vaiable ?

Beitrag lesen

Hallo,

Ist es möglich in einer XSLT, globale Variablen zu setzen, die

1.) veränderbar sind, z.B. im Sinne eines counters

Nein.

2.) aus jedem Template addiert oder subtrahiert werden können ?

Jein.

Bisherige Erfahrung:

xsl:variable ist in Wahrheit eine Konstante.

Könnte man so sehen, ja.

xsl:param funktioniert offenbar nur innerhalb desselben Templates, wodurch ein wichtiger Aspekt nicht berücksichtigt werden kann.

Gibt es Erfahrungen dazu ?

Du kannst auch globale Parameter setzen. Verwende anstelle einer globaler Variable einen globalen Paramter.

Du kannst auch "tricksen" - im begrenzten Umfeld - wenn dir klar ist, dass Variablen wie Konstanten gesehen werden können.

<xsl:variable name="myCounter" select="$a + $b" />
Der Wert von myCounter ist immer ($a + $b), haher "konstant". Was im $a und im $b steht, ist eine andere Sache. Deren Werte können sich ändern.

Was du nicht machen kannst ist, aus einem Template in ein anderes "hinüberschreiben" z.b. wenn du einen globalen Zählen haben möchtest.
Der Grund ist, dass der Prozessor die Templates in beliebiger Reihe abarbeiten kann, er kann Templates sogar parallel abarbeiten.
Dem kannst du nur so begegnen, in dem du deine Templates parametisierst, sie immer mit entsprechenden Parameter aufrufst und dafür sorgst, dass die Parameter auch immer an weitere aufgerufene Templates weitergegeben werden (was in XSLT 1.0 etwas mühsamer ist als im XSLT 2.0).

Grüße
Thomas