Hi Susan,
Please try this stylesheet. It uses the nodeset
extension function.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xalan="http://xml.apache.org/xalan"
exclude-result-prefixes="xalan">
<xsl:output method="html" indent="yes"/>
<xsl:key name="by-library" match="section-02"
use="library" />
<xsl:key name="by-collection" match="temp/section-02"
use="collection" />
<xsl:template match="/root">
<html>
<head>
<title></title>
</head>
<body>
<table border="1">
<xsl:for-each
select="section-02[generate-id(.) =
generate-id(key('by-library', library)[1])]">
<xsl:sort select="library" />
<tr>
<td><xsl:value-of select="library" /></td>
</tr>
<xsl:variable name="rtf">
<temp>
<xsl:copy-of select="key('by-library',
library)" />
</temp>
</xsl:variable>
<xsl:for-each
select="xalan:nodeset($rtf)/temp/section-02[generate-id(.)
= generate-id(key('by-collection', collection)[1])]">
<xsl:sort select="collection" />
<tr>
<td><xsl:value-of select="collection" /></td>
<td><xsl:value-of
select="count(key('by-collection', collection))"
/></td>
</tr>
</xsl:for-each>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Regards,
Mukul
--- Susan Campbell <SCampbell(_at_)ccla(_dot_)lib(_dot_)fl(_dot_)us> wrote:
Greetings,
I am unable to get second level grouping to work. I
suspect I need to use the second key I have defined,
but I'm not sure how to use it. I now get more
information than I want/need but I don't know how to
limit it and when I do, I'm not sure how to count
it. Any help will be greatly appreciated.
Thanks,
Susan
Here's what I want (in a table):
Jacksonville
Audio-Visual 2
Circulation 1
Miami
Circulation 1
Melbourne
Children's 1
Orlando
Reserves 1
Tampa
Circulation 2
Reference 1
My xml looks like this:
<section-02>
<number>57189<number>
<library>TAMPA<library>
<collection>Circulation<collection>
<section-02>
<section-02>
<number>57199<number>
<library>TAMPA<library>
<collection>Circulation<collection>
<section-02>
<section-02>
<number>57179<number>
<library>TAMPA<library>
<collection>Reference<collection>
<section-02>
<section-02>
<number>57169<number>
<library>JACKSONVILLE<library>
<collection>Audio-Visual<collection>
<section-02>
<section-02>
<number>57159<number>
<library>JACKSONVILLE<library>
<collection>Circulation<collection>
<section-02>
<section-02>
<number>57159<number>
<library>JACKSONVILLE<library>
<collection>Audio-Visual<collection>
<section-02>
<section-02>
<number>57109<number>
<library>ORLANDO<library>
<collection>Reserves<collection>
<section-02>
<section-02>
<number>57239<number>
<library>MIAMI<library>
<collection>Circulation<collection>
<section-02>
<section-02>
<number>57000<number>
<library>MELBOURNE<library>
<collection>Children's<collection>
<section-02>
And the xslt I've been trying with looks like this
(comment show where I know I'm wrong):
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:include href="funcs.xsl"/>
<xsl:key name="kCampus" match="section-02"
use="library"/>
<xsl:key name="kCollection" match="section-02"
use="concat(library, ':', collection)"/>
<xsl:template match="/">
<xsl:call-template name="header"/>
<xsl:call-template name="BuildGrid"/>
</xsl:template>
<xsl:template name="header">
<xsl:call-template name="header-gen">
<xsl:with-param name="title" select="'Number
of loans by campus and collection'"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="BuildGrid">
<center>
<table border='1'>
<xsl:for-each select="//section-02[generate-id()
= generate-id(key('kCampus', library))]">
<xsl:sort select="library" order="ascending"/>
<tr>
<td colspan='3' align='center'>
<xsl:value-of select="."/>
</td>
</tr>
<!-- not what I need, I need each collection
only once
per campus when relevant and then a count for
each collection -->
<xsl:apply-templates
select="//section-02[library = current()/library]"
mode="collection">
<xsl:sort select="collection" order="ascending"/>
</xsl:apply-templates>
</xsl:for-each>
</table>
</center>
</xsl:template>
<xsl:template match="section-02" mode="collection">
<tr>
<td>
<xsl:value-of select="collection"/>
</td>
<td>
<!-- placeholder for count of nodes by
collection/campus -->
<xsl:value-of select="'loans'"/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
__________________________________
Do you Yahoo!?
Yahoo! Mail Address AutoComplete - You start. We finish.
http://promotions.yahoo.com/new_mail