开发者

Find the total number of child elements?

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <author>
        <name>A</name>
        <book>Book1</book>
        <book>Book2</book>
    </author>
    <author>
        <name>B</name>
        &开发者_运维技巧lt;age>45</age>
        <book>Book3</book>
    </author>       
</root>

How do I write a XQuery to display the total number of books by an author?


One approach is:

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

which will return all authors who have authored a maximum number of books.

As a one liner, this can be simplified to:

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

Another way to do this is:

(for $author in /root/author
 order by count($author/book) descending
 return $author/name)[1]

which will return an author with the maximum number of books.


@Fox: should you not tag this question with "homework"? ;-)

@Oliver Hallam: IMHO, @Fox wants to list each author together with the amount of books by that author and not the author with the highest amount of books.

Your first query

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

Contains a syntax error. You should use ":=" instead of only "=". Furthermore

@Fox: to find the solution, have a look at FLWOR expressions. You can use the "for" part to select each of the book nodes with an XPath expression and bind each node to a $book variable. Then use the "let" part to define two variables ($authorName and $amountOfBooks) using the $book as "starting point". Last, use the "return" part to define the output format you need for the resulting XML.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜