2010-05-26 15 views
12

Podczas używania XSLT jak zastosować klasę do elementu, który ma już klasę? Sposób, w jaki to robię, zastępuje klasę, która jest już obecna? Jak dodać klasę do istniejącej klasy? Mój kod jest następujący:XSLT - Dodawanie klasy do czegoś z klasą?

<xsl:if test="data[@alias = 'off'] = 1"> 
    <xsl:attribute name="class">off</xsl:attribute> 
</xsl:if> 
<xsl:if test="$currentPage/ancestor-or-self::node/@id = current()/@id"> 
    <xsl:attribute name="class">active</xsl:attribute> 
</xsl:if> 

Dzięki.

Odpowiedz

14

Innym sposobem wokół:

<xsl:attribute name="class"> 
    <xsl:if test="data[@alias = 'off'] = 1">off </xsl:if> 
    <xsl:if test="$currentPage/ancestor-or-self::node/@id = current()/@id">active </xsl:if> 
</xsl:attribute> 

Uwaga dodatkowa przestrzeń umieścić po każdej wartości atrybutu. Procesor XSLT sam przycina przestrzeń końcową z wartości atrybutu, więc nie trzeba wykonywać skomplikowanej obsługi przestrzeni.

+0

To doskonały, dzięki! – Probocop

+1

Należy zauważyć, że w kategoriach spacji, implementacja Qt będzie zawierała znaki nowego wiersza, jeśli zostały napisane w ten sposób. Jeśli dodasz znaki nowej linii w tagu '

+0

@Alexis BTW, literalne znaki nowej linii wewnątrz wartości atrybutu są normalizowane w spacją po ponownym przeanalizowaniu dokumentu. Tak więc pomimo brzydszego wyglądu, nowe linie działałyby nawet jako ograniczniki tokenów. – Tomalak

6

można złączyć aktualną wartość atrybutu klasy z nowym:

<xsl:if test="$currentPage/ancestor-or-self::node/@id = current()/@id"> 
    <xsl:attribute name="class"> 
     <xsl:value-of select="concat(@class,' active')"/> 
    </xsl:attribute> 
</xsl:if> 
+0

Próbowałem tego z narzędziem Qt xmlpatterns i nie działa (nic się nie dzieje). Szkoda, bo z drugiej metody nie mogę skorzystać w mojej sytuacji! –

Powiązane problemy