Xquery 是否查找子元素的总数?

Xquery 是否查找子元素的总数?,xquery,Xquery,如何编写XQuery以显示作者的图书总数?一种方法是: <?xml version="1.0" encoding="UTF-8"?> <root> <author> <name>A</name> <book>Book1</book> <book>Book2</book> </author> <auth

如何编写XQuery以显示作者的图书总数?

一种方法是:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <author>
        <name>A</name>
        <book>Book1</book>
        <book>Book2</book>
    </author>
    <author>
        <name>B</name>
        <age>45</age>
        <book>Book3</book>
    </author>       
</root>
它将返回所有著有最多数量书籍的作者

作为一个衬里,这可以简化为:

let $max-books = max(/root/author/count(book))
return /root/author[count(book) = $max-books]
另一种方法是:

/root/author[count(book) = max(/root/author/count(book))]

这将返回一位拥有最多图书数量的作者。

@Fox:你不应该在这个问题上加上家庭作业标签吗-

@奥利弗·哈勒姆:嗯,@Fox想列出每个作者以及该作者的图书数量,而不是图书数量最高的作者

你的第一个问题

(for $author in /root/author
 order by count($author/book) descending
 return $author/name)[1]
包含语法错误。您应该使用:=而不是仅使用=。此外

@福克斯:要找到解决办法,请看一看。可以使用for部分使用XPath表达式选择每个book节点,并将每个节点绑定到$book变量。然后使用let部分以$book为起点定义两个变量$authorName和$amountOfBooks。最后,使用返回部分定义生成的XML所需的输出格式

let $max-books = max(/root/author/count(book))
return /root/author[count(book) = $max-books]