2011-09-19 42 views
0
<?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

一种方法是:

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] 

它会返回一个作家与书的最大数量。

0

@Fox:你不应该用“作业”来标记这个问题吗? ;-)

@Oliver Hallam:恕我直言,@Fox希望将每位作者与该作者的书籍数量一起列出,而不是拥有最高数量书籍的作者。

第一个查询

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

包含语法错误。你应该使用“:=”而不是“=”。此外

@福克斯:找到解决办法,看看FLWOR expressions。您可以使用“for”部分来选择,每个都使用XPath表达式并将每个节点绑定到$ book变量。然后使用“let”部分来定义两个使用$ book作为“起点”的变量($ authorName和$ amountOfBooks)。最后,使用“返回”部分来定义所需XML的输出格式。