Frage

Ich bin Transformieren eines XML-Dokuments. Es ist ein Attribut @prettydate, die eine Zeichenfolge ähnlich wie „Freitag 7. Mai 2010“ ist. Ich möchte diese Zeichenfolge teilen und fügen Sie Links zu den Monat und das Jahr. Ich bin mit dem exslt:strings Modul und ich kann anderen notwendigen EXSLT Modul hinzufügen.

Das ist mein Code so weit:

<xsl:template match="//calendar">
    <xsl:variable name="prettyparts">
        <xsl:value-of select="str:split(@prettydate,', ')"/>
    </xsl:variable>

    <table class='day'>
        <thead>
            <caption><xsl:value-of select="$prettyparts[1]"/>, 
                    <a>
                        <xsl:attribute name='href'><xsl:value-of select="$baseref"/>?date=<xsl:value-of select="@highlight"/>&amp;per=m</xsl:attribute>
                        <xsl:value-of select='$prettyparts[2]'/>
                    </a> 
                    <xsl:value-of select='$prettyparts[3]'/>,  
                    <a>
                        <xsl:attribute name='href'><xsl:value-of select="$baseref"/>?date=<xsl:value-of select="@highlight"/>&amp;per=y</xsl:attribute>
                        <xsl:value-of select='$prettyparts[4]'/>
                    </a> 
            </caption>
<!--etcetera-->

Ich habe überprüft, um $ prettyparts durch einen <xml:for-each/> laufen, dass ich die erwartete nodeset bin immer:

<token>Friday</token>
<token>May</token>
<token>7</token>
<token>2010</token>

Aber egal, welche Art und Weise ich direkt auf einen bestimmten <token> zu beziehen versuche (nicht in einer foreach) bekomme ich nichts oder verschiedene Fehler mit ungültigen Typen zu tun. Hier einige der Syntax Ich habe versucht:

<xsl:value-of select="$prettyparts[2]"/>
<xsl:value-of select="$prettyparts/token[2]"/>
<xsl:value-of select="exsl:node-set($prettyparts/token[2])"/>
<xsl:value-of select="exsl:node-set($prettyparts/token)[2]"/>

Jede Idee, was der Ausdruck sein sollte?

ETA: Dank @ DevNull Vorschlag, der richtige Ausdruck ist:

<xsl:value-of select="exsl:node-set($prettyparts)[position()=2]"/>

und ich habe die Variable auf diese Weise eingestellt werden:

<xsl:variable name="prettyparts" select="str:split(@prettydate,', ')" />
War es hilfreich?

Lösung

Versuchen [position()=2] statt [2] in Ihren Prädikaten verwenden.

Beispiel:

<xsl:value-of select="$prettyparts[position()=2]"/>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top