2011-09-19 43 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的輸出格式。