即时计数节点

时间:2011-07-30 13:42:50

标签: xml xslt variables count nodes

我正在尝试计算XML文档中的节点,如下所示,而不事先知道节点的名称:

<library>
<book>1</book>
<book>2</book>
<magazine>1</magazine>
<magazine>2</magazine>
<magazine>3</magazine>
</library>

我正在尝试这样做(以及此类型的变体),但没有到达任何地方:

<xsl:template match="*">
<xsl:variable name="e" select="name()"/>
<xsl:value-of select="count(../$e)"/>
</xsl:template>

感谢Dimitre,这就是诀窍! :)

1 个答案:

答案 0 :(得分:0)

使用

count(//*[name() = name(current())]

因为此XPath表达式以//伪运算符开头,所以效率可能非常低(慢)。

更好地使用密钥。定义:

<xsl:key name="kElemByName" match="*" use="name()"/>

并在您的代码中使用它

count(key('kElemByName', name(current())))