Hallo!
<xsl:template match="menuItem" mode="subnav">
<li>
<xsl:attribute name="class" value="" />
<xsl:if test="@href = $current_file_path">
<xsl:attribute name="class"><xsl:value-of select="concat(@class,' current')" /></xsl:attribute>
</xsl:if>
<xsl:if test="position()=1">
<xsl:attribute name="class"><xsl:value-of select="concat(@class,' first')" /></xsl:attribute>
</xsl:if>
<!-- ... etc. -->
Du solltest eher so etwas machen:
<xsl:template match="menuItem" mode="subnav">
<li>
<xsl:attribute name="class">
<xsl:if test="@href = $current_file_path">
<xsl:value-of select="' current'" />
</xsl:if>
<xsl:if test="position() = 1">
<xsl:value-of select="' first'" />
</xsl:if>
</xsl:attribute>
<!-- etc. -->
</xsl:template>
Du hast bei Deinem Versuch zwei Dinge nicht beachtet:
-
XSL ist eine funktionale Programmiersprache, d.h. Du kannst nicht einfach etwas Setzen und hinterher ändern. Selbst wenn Du zweimal hintereinander xsl:variable mit dem gleichen Namen hast, deklarierst Du im Endeffekt ZWEI Variablen, wobei die erste nur bis zum Auftauchen der zweiten sichtbar ist.
-
XPath-Selektoren beziehen sich immer auf den Quell-Dokumentbaum, d.h. @class matcht garantiert *nicht* das class-Attribut des *generierten* Knotens - sondern höchstens ein potentiell existierendes class-Attribut des aktuellen Knotens im Quelldokument.
Viele Grüße,
Christian