5

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"/>&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-->

$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,', ')" />
4

1 に答える 1

1

述語[position()=2]の代わりに使用してみてください。[2]

例:

<xsl:value-of select="$prettyparts[position()=2]"/>
于 2010-05-07T19:46:58.513 に答える