Subject: [xsl] Re: RE: grouping content From: "Yang" <sfyang@xxxxxxxxxxxxx> Date: Mon, 9 Apr 2001 09:05:19 +0800 |
Hi, Once again, Jeni presented a complete and clear description how to work out the grouping problem using xslt. In this presentation, I would like to point out there are some typo errors in missing sign of **)** with concat function and one in using LocationGroups key name which is another typo error of **locs-by-area**. Following is a complete list of using apply-templates styles for a reference which has been tested using msxml3. Hopefully it helps newbies easily to learn Jeni's technique to solve grouping problems. ** Group-content.xsl ** <?xml version="1.0" encoding="iso-8859-1" ?> - <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:key name="locs-by-area" match="Location" use="@Area" /> <xsl:key name="locs-by-area-and-type" match="Location" use="concat(@Area, ':', @Type)" /> - <xsl:template match="/"> <xsl:apply-templates select="//US" /> </xsl:template> + <xsl:template match="US"> - <!-- iterate over the Location elements with unique Areas --> <xsl:apply-templates mode="area-group" select="Location[generate-id() =generate-id(key('locs-by-area', @Area)[1])]" /> </xsl:template> - <xsl:template match="Location" mode="area-group"> - <!-- output a line giving the Area --> <xsl:value-of select="@Area" /> <br /> <br /> - <!-- iterate over the Location elements with this Area, but only those with unique Types --> <xsl:apply-templates mode="area-and-type-group" select="key('locs-by-area', @Area)[generate-id() = generate-id(key('locs-by-area-and-type', concat(@Area, ':', @Type))[1])]" /> </xsl:template> - <xsl:template match="Location" mode="area-and-type-group"> - <!-- output a line giving the Type --> <xsl:value-of select="@Type" /> <br /> - <!-- create a variable to hold the Locations with that Type in that Area --> <xsl:variable name="locations" select="key('locs-by-area-and-type', concat(@Area, ':', @Type))" /> - <!-- apply templates to the location with Rural scope --> <xsl:apply-templates select="$locations[@Scope = 'Rural']" /> - <!-- apply templates to the location with Urban scope --> <xsl:apply-templates select="$locations[@Scope = 'Urban']" /> </xsl:template> - <xsl:template match="Location"> <xsl:value-of select="@Scope" /> : <xsl:value-of select="@value" /> <br /> </xsl:template> </xsl:stylesheet> Sun-fu Yang sfyang@xxxxxxxxxxxxx XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] simulating multidimensional k, Dan Diebolt | Thread | RE: [xsl] Re: RE: grouping content, Tim Watts |
[xsl] simulating multidimensional k, Dan Diebolt | Date | RE: [xsl] Re: RE: grouping content, Tim Watts |
Month |