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

时间:2011-03-22 12:54:49

标签: 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>

我在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。

谢谢!

1 个答案:

答案 0 :(得分:6)

这是常见问题解答

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

//SomeName[1]

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

仅选择文档中第k个SomeName元素的正确方法是

(//SomeName)[$k]

在您的情况下,请使用

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

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