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

Xslt xsl:variable包含节点集。如何输出变量的第n个节点?,xslt,split,nodes,exslt,Xslt,Split,Nodes,Exslt,我正在转换一个XML文档。有一个属性@prettydate,它是一个类似于“2010年5月7日星期五”的字符串。我想拆分该字符串并添加到月份和年份的链接。我正在使用exslt:strings模块,我可以添加任何其他必要的exslt模块 这是我目前的代码: <xsl:template match="//calendar"> <xsl:variable name="prettyparts"> <xsl:value-of select="str:s

我正在转换一个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验证了我得到了预期的节点集:

<token>Friday</token>
<token>May</token>
<token>7</token>
<token>2010</token>
星期五
也许
7.
2010
但是,无论我尝试以何种方式直接引用特定的
(而不是在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,', ')" />

尝试在谓词中使用
[position()=2]
而不是
[2]

例如:

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


您使用的是哪个XSLT处理器?我使用的是使用libxslt库()的PHP XSLTProcessor类()。这就是你要问的,对吧?
position()=x
是关键,但还不够。最后的工作select语句是
select=“exsl:node set($prettyparts)[position()=2]”