查找子元素的总数?

时间:2011-09-19 15:22:17

标签: 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>

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

2 个答案:

答案 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所需的输出格式。