xsl:variable包含节点集。如何输出变量的第n个节点?

dna*_*irl 5 xslt split exslt nodes

我正在转换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-->
Run Code Online (Sandbox Code Playgroud)

我已经通过运行$ prettyparts验证了<xml:for-each/>我正在获得预期的节点集:

<token>Friday</token>
<token>May</token>
<token>7</token>
<token>2010</token>
Run Code Online (Sandbox Code Playgroud)

但是,无论我尝试以哪种方式<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]"/>
Run Code Online (Sandbox Code Playgroud)

知道表达应该是什么吗?

预计到达时间:感谢@DevNull的建议,正确的表达为:

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

并且,我必须以这种方式设置变量:

<xsl:variable name="prettyparts" select="str:split(@prettydate,', ')" />
Run Code Online (Sandbox Code Playgroud)

Dan*_*ley 1

尝试在谓词中使用[position()=2]代替。[2]

例子:

<xsl:value-of select="$prettyparts[position()=2]"/>
Run Code Online (Sandbox Code Playgroud)