xQuery-count函数

xQuery-count函数,xquery,Xquery,我希望形成一个xQuery,如果某个类别包含的图书数量超过x,则返回该类别的图书。例如,如果我有4个类别;音乐、电影、教育、健康,他们都有一本书在里面,除了音乐有三本,我想把这一类列出来。我尝试了一系列的查询,但似乎都做不好,每次都没有结果,我相信我需要在某个时候使用不同的值?不太确定 下面可以看到一个源代码示例,我在一个编辑器中测试查询,该编辑器不会将源代码保存为文件,因此我测试xQuery必须从以下几个方面开始: e、 g.在/书店/书中花x美元 <bookstore>

我希望形成一个xQuery,如果某个类别包含的图书数量超过x,则返回该类别的图书。例如,如果我有4个类别;音乐、电影、教育、健康,他们都有一本书在里面,除了音乐有三本,我想把这一类列出来。我尝试了一系列的查询,但似乎都做不好,每次都没有结果,我相信我需要在某个时候使用不同的值?不太确定

下面可以看到一个源代码示例,我在一个编辑器中测试查询,该编辑器不会将源代码保存为文件,因此我测试xQuery必须从以下几个方面开始:

e、 g.在/书店/书中花x美元

<bookstore>        
<book category="Music">
            <year>  2005  </year>
            <price>  50  </price>
        </book>
    <book category="Music">
            <year>  2010  </year>
            <price>  35  </price>
        </book>
    <book category="Music">
            <year>  1982  </year>
            <price>  70  </price>
        </book>
    <book category="Film">
            <year>  2000  </year>
            <price>  10  </price>
        </book>
    <book category="Health">
            <year>  1965  </year>
            <price>  50  </price>
        </book>
    <book category="Education">
            <year>  2012  </year>
            <price>  70  </price>
        </book>
</bookstore>

  2005  
  50  
  2010  
  35  
  1982  
  70  
  2000  
  10  
  1965  
  50  
  2012  
  70  

非常感谢您的帮助

我刚刚在BaseX数据库中尝试了这个查询,它似乎如您所期望的那样工作:

for $cat in distinct-values(/bookstore/book/@category)
let $nbBook := count(/bookstore/book[@category=$cat])
return if($nbBook > 1) then $cat else ''

类似于@koopajah的答案,既然我已经写了,我将提交它

for $category in distinct-values(/*/book/@category)
where count(/*/book[@category=$category]) >= 3
return
    <results>{$category}</results>

使用这个XQuery,它也是一个纯XPath 2.0表达式。注意:未使用
distinct-values()

(/*/*/@category)[index-of(/*/*/@category, .)[3]]/string()
<bookstore>
    <book category="Music">
        <year>  2005  </year>
        <price>  50  </price>
    </book>
    <book category="Music">
        <year>  2010  </year>
        <price>  35  </price>
    </book>
    <book category="Music">
        <year>  1982  </year>
        <price>  70  </price>
    </book>
    <book category="Film">
        <year>  2000  </year>
        <price>  10  </price>
    </book>
    <book category="Health">
        <year>  1965  </year>
        <price>  50  </price>
    </book>
    <book category="Education">
        <year>  2012  </year>
        <price>  70  </price>
    </book>
</bookstore>
Music
对提供的XML文档进行评估时

(/*/*/@category)[index-of(/*/*/@category, .)[3]]/string()
<bookstore>
    <book category="Music">
        <year>  2005  </year>
        <price>  50  </price>
    </book>
    <book category="Music">
        <year>  2010  </year>
        <price>  35  </price>
    </book>
    <book category="Music">
        <year>  1982  </year>
        <price>  70  </price>
    </book>
    <book category="Film">
        <year>  2000  </year>
        <price>  10  </price>
    </book>
    <book category="Health">
        <year>  1965  </year>
        <price>  50  </price>
    </book>
    <book category="Education">
        <year>  2012  </year>
        <price>  70  </price>
    </book>
</bookstore>
Music

不太清楚为什么,但这对我不起作用,它只是说没有找到结果:/通过一点努力,我成功地让它工作了,非常感谢!:)@user1886061-查看我关于使用外部文档的更新答案。谢谢,我真的很感激,但以下内容也可以吗?对于doc('input.xml')/bookstore/let$y中的$x,使用不同的值($x/book/@category),其中count($x/book[@category=$y])>=3返回$y@user1886061-关闭。您必须为执行另一个
,而不是让
执行。查看我的更新以了解更正的版本。不太确定为什么,但这对我不起作用,它只是说找不到结果:/您使用哪种语言发送xquery查询?不用担心,我最终成功地让它工作了,我做了一些更改,它似乎工作正常!所以非常感谢!:)哦,只是一个简单的问题,如果我要将它保存到一个外部文件中,我会将顶行更改为什么?我会自己测试,但是我唯一的程序不允许你加载XML文件,你只需要输入它。如果是:$cat的不同值(doc(file.xml)/bookstore/book/@category)?根据这一点,我认为是这样的:但是您还必须更改访问文档的第二行,以便您可能对一个完全不同的解决方案感兴趣,这是一个纯XPath 2.0表达式,根本不使用
distinct-values()