动态计算节点数

发布于 2024-11-27 11:19:28 字数 502 浏览 2 评论 0原文

我试图在事先不知道节点名称的情况下对 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,这成功了! :)

I'm trying to count nodes in an XML document like the one below without knowing the names of the nodes beforehand:

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

I'm trying do it this way (and variants of this) but not getting anywhere:

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

Thanks Dimitre, that did the trick! :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

糖粟与秋泊 2024-12-04 11:19:28

使用

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

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

更好地使用按键。定义:

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

并在代码中像这样使用它

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

Use:

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

Because this XPath expression starts with the // pseudo-operator, it may be very inefficient (slow).

Better use keys. Define:

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

and in your code use it like this:

count(key('kElemByName', name(current())))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文