Вы используете <xsl:value-of>
в своей переменной. Это не копирует узел, но его строковое значение (значение атрибута @name
узла). Это означает, что вы создаете переменную, содержащую каскадную строку, но не имеющую структуры.
Попробуйте:
<xsl:variable name="rtf">
<xsl:for-each select="//menuList/mode">
<xsl:sort select="@name" data-type="text" order="ascending" />
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:variable>
Теперь ваша переменная содержит фрагмент дерева результатов, состоящий из <mode>
узлов в выбранном вами порядке, что означает, что это:
<xsl:value-of select="exsl:node-set($rtf)/*[3]/@name" />
<!-- don't forget you have element nodes now! ^^^^^^ -->
будет работать. Также обратите внимание, что …/*[position() = 3]
и …/*[3]
- это одно и то же.