<?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>
如何编写XQuery以显示作者的书籍总数?
答案 0 :(得分:0)
一种方法是:
let $max-books = max(/root/author/count(book))
return /root/author[count(book) = $max-books]
将返回所有撰写过最多书籍的作者。
作为一个班轮,这可以简化为:
/root/author[count(book) = max(/root/author/count(book))]
另一种方法是:
(for $author in /root/author
order by count($author/book) descending
return $author/name)[1]
将返回具有最大图书数量的作者。
答案 1 :(得分:0)
@Fox:你不应该用“家庭作业”来标记这个问题吗? ; - )
@Oliver Hallam:恕我直言,@ Fox希望列出每位作者以及该作者的书籍数量,而不是具有最多书籍的作者。您的第一个查询
let $max-books = max(/root/author/count(book))
return /root/author[count(book) = $max-books]
包含语法错误。您应该使用“:=”而不是“=”。此外
@Fox:要找到解决方案,请查看FLWOR expressions。您可以使用“for”部分选择带有XPath表达式的每个书本节点,并将每个节点绑定到$ book变量。然后使用“let”部分使用$ book作为“起始点”定义两个变量($ authorName和$ amountOfBooks)。最后,使用“return”部分来定义生成的XML所需的输出格式。