我有以下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>
我在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>
为什么/ content // an [1]返回“test 1”和/ content // an [2] return“”?伯爵说有3个。我正在使用libxslt。
谢谢!
答案 0 :(得分:6)
这是常见问题解答。
使用//
缩写时必须小心。
//SomeName[1]
表示:选择文档中所有SomeName
元素,这些元素是其父级的第一个SomeName
子元素。通常,所选节点不止一个(甚至是所有节点)。
仅选择文档中第k个SomeName
元素的正确方法是:
(//SomeName)[$k]
在您的情况下,请使用:
(/内容//一个)[2]
请记住:[]
运算符的优先级(绑定更强)高于//
缩写。