MudGuard: Variable oder nicht Variable - das ist die Frage!

Beitrag lesen

Hi,

xsl:choose
<xsl:when test="@type='normal'">
  <xsl:variable name="typ" select="'normal'" />
</xsl:when>
<xsl:when test="@type='error'">
  <xsl:variable name="typ" select="'error'" />
</xsl:when>
<xsl:when test="@type='security'">
  <xsl:variable name="typ" select="'security'" />
</xsl:when>
xsl:otherwise
  <xsl:variable name="typ" select="'normal'" />
</xsl:otherwise>
</xsl:choose>
<xsl:value-of select="$typ" />

Egal was @typ enthält, die Variable $typ wird immer gesetzt (wegen otherwise) trotzdem meckert er: variable 'typ' not found und zwar in der Zeile mit dem value-of-Statemant. Ich würde den Typ gerne in einer Variablen Speichern, weil er mehr als einemal gebraucht wird.
Warum erkennt er die Deklaration von $typ nicht an?

Eine Variable existiert nur innerhalb des Blocks, in dem sie definiert wird.

Du definierst nicht eine, sondern vier Variablen (ok, nur eine davon existiert auch tatsächlich).

Jede deiner 4 Variablen beendet ihre Existenz direkt nach ihrer Definition, da der jeweilige Block endet.

<xsl:variable name="typ">
 xsl:choose
   <xsl:when test="@type='normal'">normal</xsl:when> <!-- auch überflüssig, da identisch mit otherwise -->
   <xsl:when test="@type='error'">error</xsl:when>
   <xsl:when test="@type='security'">security</xsl:when>
   xsl:otherwisenormal</xsl:otherwise>
 </xsl:choose>
</xsl:variable>
<xsl:value-of select="$typ" />

sollte klappen.

Wobei, wenn sowieso nur der Text ausgegeben werden soll, die Variable komplett überflüssig ist:

xsl:choose
   <xsl:when test="@type='error'">error</xsl:when>
   <xsl:when test="@type='security'">security</xsl:when>
   xsl:otherwisenormal</xsl:otherwise>
</xsl:choose>

cu,
Andreas

--
Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/