Hallo,
der Topic ist ja schon ein bißchen älter, aber vielleicht hast du dein Problem bisher nicht gelöst.
Die Frage "wie ändere ich eine Variable in XSLT" muss man mit "garnicht" beantworten, denn XSLT ist eine sogenannte
funktionale Programmiersprache, das heißt man muss sich von dem Gedanken frei machen, dass "Variable" Speicherstellen sind, die beliebig manipuliert werden können. Vielmehr kann man sie als Aliasses für die Ergebnisse von Berechnungen sehen (siehe auch gleich die einleitenden Passagen im oben genannten Wikipedia-Link).
In XSLT 1.0 (zu 2.0 habe ich keine Erfahrung), gibt es (mindestens) 2 Möglichkeiten dein Problem zu lösen.
1) Die Berechnung in den Inhalt des
xsl:variable Elements schreiben:
<xsl:variable name="trans">
<xsl:choose>
<xsl:when test="@lemma='ein'"><xsl:text>a</xsl:text></xsl:when>
<xsl:when test="@lemma='--'"><xsl:text>--</xsl:text></xsl:when>
<xsl:otherwise><xsl:text>k. Ü.</xsl:text></xsl:otherwise>
</xsl:choose>
</xsl:variable>
Technische Anmerkung: Der Datentyp von
$trans ist dann ein sognenanntes "
Result Tree Fragment" (RTF). Dies ist hier unproblematisch, da dies hier als String interpretiert werden kann.
2) Im
select-Attribut
Diese Methode wird soweit ich weiss als
Oliver-Becker-Methode bezeichnet. (Siehe seine
Anmerkung zur substring-Funktion seiner Übersetzung der XPath-1.0-Spezifikation)
Quote<xsl:variablename="trans"select="concat(substring('a',1div@lemma='ein'),substring('--',1div@lemma='--'),substring('k.Ü.',1divnot(@lemma='ein'or@lemma='--')))"/>
Wenn du sehr viele Alternativen hast, ist Methode 1 sicher vorzuziehen.
HTH
Update 19:25
Als 3. Methode könnte man auch eine (rekursive) Funktion (="Template" in XSLT-speak) schreiben die den gefundenen String ausgibt. Die würde man dann mit
call-template an der gleichen Stelle rufen wo bei Methode 1 jetzt das
choose steht.\n\n
<!--EDIT|pKai|1180200463-->
I sense a soul in search of answers.