(Q15) Make an alphabetic list of publishers. Within each publisher, make a list of books, each containing a title and a price,
in descending order by price.
<publisher_list>
FOR $p IN distinct(document("bib.xml")//publisher)
RETURN
<publisher>
<name> $p/text() </name> ,
FOR $b IN document("bib.xml")//book[publisher = $p]
RETURN
<book>
$b/title ,
$b/price
</book> SORTBY(price DESCENDING)
</publisher> SORTBY(name)
</publisher_list>
XSLT equivalent to (Q15)
<publisher_list xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:for-each select="document('bib.xml')//publisher[not(.=preceding::publisher)]">
<xsl:sort select="."/>
<publisher>
<name><xsl:value-of select="."/></name>
<xsl:for-each select="document('bib.xml')//book[publisher=current()]">
<xsl:sort select="price" order="descending"/>
<book>
<xsl:copy-of select="title"/>
<xsl:copy-of select="price"/>
</book>
</xsl:for-each>
</publisher>
</xsl:for-each>
</publisher_list>
|