首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有未给定属性的节点数目

具有未给定属性的节点数目
EN

Stack Overflow用户
提问于 2018-12-22 17:15:57
回答 1查看 38关注 0票数 0

所以我想数一数每个创作者都有多少视频给所有的创作者。有人能帮我吗?

<Video videoID="v0006" link="" creatorID="u0001" imageLink=""/>

我用不同的creatorID多次重复这个声明。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-22 17:44:37

使用XPath3.0或更高版本的for表达式和distinct-values(...)函数可以做到这一点:

代码语言:javascript
复制
for $i in distinct-values(for $k in Video/@creatorID return $k) return concat('ID=',$i,', Count=',count(Video[@creatorID = $i]))

此表达式以ID=xxxx, Count=y格式创建字符串。

例如,如果将其放入XSLT3.0 xsl:value-of中,则可以以这种方式输出由NEWLINE字符分隔的所有结果:

代码语言:javascript
复制
<xsl:value-of select="for $i in distinct-values(for $k in Video/@creatorID return $k) return concat('ID=',$i,', Count=',count(Video[@creatorID = $i]))" separator="&#xa;" />

对于一个示例XML文件,如

代码语言:javascript
复制
<Video videoID="v0006" link="" creatorID="u0001" imageLink=""/>
<Video videoID="v0007" link="" creatorID="u0001" imageLink=""/>
<Video videoID="v0001" link="" creatorID="u0002" imageLink=""/>
<Video videoID="v0008" link="" creatorID="u0001" imageLink=""/>
<Video videoID="v0002" link="" creatorID="u0002" imageLink=""/>

它的产出是

代码语言:javascript
复制
ID=u0001, Count=3
ID=u0002, Count=2

如果希望将输出限制为具有一定最小发生次数的If,请使用IF-然后-ELSE(这里使用LET以获得更好的性能)。

代码语言:javascript
复制
for $i in distinct-values(for $k in Video/@creatorID return $k) return let $c := count(Video[@creatorID = $i]), $s := concat('ID=',$i,', Count=',$c) return if ($c>2) then $s else ''

输出:

代码语言:javascript
复制
ID=u0001, Count=3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53897774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档