XSL: Variable enthält nodeset. Wie erfolgt die Ausgabe n-ten Knoten Variable?
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"/>&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"/>&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,', ')" />
Lösung
Versuchen [position()=2]
statt [2]
in Ihren Prädikaten verwenden.
Beispiel:
<xsl:value-of select="$prettyparts[position()=2]"/>