XSL: Trasformazioni sul testo

Accidenti al trattino!
Qualche giorno fa mi si è presentato il seguente problema: dato un xml come quello seguente dovevo individuare, in un dato tag, il trattino e colorare la parte precedente.

<tagPadre>
    testo prima del trattino – testo dopo trattino
        <altroTag>
            con testo in altri tag
        </altroTag>
</tagPadre>

Certo l’ideale era modificare la struttura dell’xml e gestire la cosa come si dovrebbe ma le esigenze andavano in un’altra direzione…e così ho iniziato col provare la prima cosa che mi è venuta in mente; ovvero effettuare il substring del testo nel template con match al tagPadre. Subito il problema si è fatto sentire: così facendo altroTag non veniva valutato dall’opportuno template.
Ecco che è iniziato un lavoro di ricerca e alla fine ho scoperto che i processori xsl trattano ogni parte testuale come un nodo sul quale è possibile fare un match. Questo è possibile grazie alla direttiva text().
Alla fine il mio problema è stato risolto così:

<xsl:template match=”text()”>
        <xsl:choose>
            <xsl:when test=”../../tagPadre”>
                <xsl:choose>
                    <xsl:when test=”contains(.,’-‘)”>
                        <span style=”color: #b55f0e;”>
                            <xsl:value-of select=”substring-before(.,’-‘)”/>
                        </span>
                        <xsl:text> – </xsl:text>
                        <span style=”color:black;”>
                            <xsl:value-of select=”substring-after(.,’-‘)”/>
                        </span>
                    </xsl:when>
                    <xsl:otherwise>
                            <xsl:value-of select=”.”/>
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select=”.”/>
            </xsl:otherwise>
        </xsl:choose>
</xsl:template>

In pratica eseguo un match su un qualsiasi nodo di tipo testo e se questo appartiene al tag d’interesse applico la trasformazione, altrimenti inserisco il testo nell’output della trasformazione senza interferire.

 

XSL: Trasformazioni sul testoultima modifica: 2008-09-22T21:03:39+02:00da netspart
Reposta per primo quest’articolo

Lascia un commento