Thomas J.S.: Lokale Variable setzen, wenn Bedingung erfüllt ist?

Beitrag lesen

Hallo,

jetzt noch eine Frage zu XSL.

Gut, die Antwort liegt nämlich schon im Archiv (ich weiss es, weil ich sie gegeben habe *g*)

Wenn eines der Data Elemente den Wert "ja" enthält, soll die globale Variable abc auf 2 gesetzt werden.

Wie mein Vorposter schon erwählte, das geht nicht. Einmal deklarierte Variablen können im XSL nicht mehr geändert werden. Dafür gibt es xsl:param.

Wenn ich die Variable unten abfrage, steht sie aber trotzdem noch auf 1.
Anscheinend liegt das daran, dass ich keine Variable innerhalb einer for-each oder if Schleife setzen kann.

Doch das kannst du, aber dann hat sie ihrem Gültigkeitsbereich auch nur innerhalb des xsl:for-each

<xsl:variable name="abc" select="'1'"/>

Das ist eine globale Variable.

<xsl:template match="/">
  <xsl:for-each select="Stamm/Data">
    <xsl:if test=". = 'Ja'">
      <xsl:variable name="abc" select="'2'"/>

Und das ist eine lokale Variable, die nur innerhalb von xsl:if existiert. Wird xsl:if beendet, endet auch der Gültigkeitesbereich der Variable.

Was du möchtest, kannst du mit einem recursiven Aufruf erledigen, suche bitte im Archiv nach counter in diesem Zusammenhang.

Grüße
Thomas