XML ドキュメントを変換しています。@prettydate
「2010 年 5 月 7 日金曜日」のような文字列である属性があります。その文字列を分割して、月と年にリンクを追加したいと考えています。モジュールを使用しておりexslt:strings
、他の必要な EXSLT モジュールを追加できます。
これまでの私のコードは次のとおりです。
<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-->
$prettyparts を実行し<xml:for-each/>
て、予想されるノードセットを取得していることを確認しました。
<token>Friday</token>
<token>May</token>
<token>7</token>
<token>2010</token>
しかし、どの方法で特定のもの<token>
を (foreach ではなく) 直接参照しようとしても、無効な型とは関係なく、何もまたはさまざまなエラーが発生します。私が試した構文の一部を次に示します。
<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]"/>
式がどうあるべきか考えていますか?
ETA: @DevNull の提案のおかげで、正しい表現は次のとおりです。
<xsl:value-of select="exsl:node-set($prettyparts)[position()=2]"/>
そして、変数を次のように設定する必要があります。
<xsl:variable name="prettyparts" select="str:split(@prettydate,', ')" />