我有以下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.
谢谢!
这是一个FAQ.
使用//
缩写时必须小心.
//SomeName[1]
Run Code Online (Sandbox Code Playgroud)
表示:选择SomeName
文档中作为SomeName
其父级的第一个子级的所有元素.通常,所选节点不止一个(甚至是所有节点).
SomeName
在文档中仅选择$ k 元素的正确方法是:
(//SomeName)[$k]
Run Code Online (Sandbox Code Playgroud)
在您的情况下,使用:
(/内容//一个)[2]
请记住:[]
运算符的优先级(绑定更强)比//
缩写更高.