所以我想数一数每个创作者都有多少视频给所有的创作者。有人能帮我吗?
<Video videoID="v0006" link="" creatorID="u0001" imageLink=""/>
我用不同的creatorID多次重复这个声明。
发布于 2018-12-22 17:44:37
使用XPath3.0或更高版本的for表达式和distinct-values(...)函数可以做到这一点:
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字符分隔的所有结果:
<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="
" />对于一个示例XML文件,如
<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=""/>它的产出是
ID=u0001, Count=3
ID=u0002, Count=2如果希望将输出限制为具有一定最小发生次数的If,请使用IF-然后-ELSE(这里使用LET以获得更好的性能)。
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 ''输出:
ID=u0001, Count=3https://stackoverflow.com/questions/53897774
复制相似问题