XSL使用任何级别的节点索引

dou*_*ton 3 xslt xpath

我有以下xml:

<content>
 <p>para 1<an>test 1</an></p>
 <p>para 2<an>test 2</an></p>
 <p>para 3<an>test 3</an></p>
</content>
Run Code Online (Sandbox Code Playgroud)

我在xsl中有以下表达式:

<xsl:template match="/">
 <xsl:text>Count: </xsl:text>
 <xsl:value-of select="count(/content//an)" />
 <xsl:text> Content: </xsl:text>
 <xsl:value-of select="/content//an[2]" />
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

为什么/ content // an [1]返回"test 1"和/ content // an [2]返回""?伯爵说有3个.我正在使用libxslt.

谢谢!

Dim*_*hev 6

这是一个FAQ.

使用//缩写时必须小心.

//SomeName[1]
Run Code Online (Sandbox Code Playgroud)

表示:选择SomeName文档中作为SomeName其父级的第一个子级的所有元素.通常,所选节点不止一个(甚至是所有节点).

SomeName在文档中仅选择$ k 元素的正确方法是:

(//SomeName)[$k]
Run Code Online (Sandbox Code Playgroud)

在您的情况下,使用:

(/内容//一个)[2]

请记住:[]运算符的优先级(绑定更强)比//缩写更高.