Skip to Content
XSLT
book

XSLT

by Doug Tidwell
August 2001
Intermediate to advanced
480 pages
11h 16m
English
O'Reilly Media, Inc.
Content preview from XSLT

Grouping Nodes

When grouping nodes, we sort things to get them into a certain order, then we group all items that have the same value for the sort key (or keys). We’ll use xsl:sort for this grouping, then use variables or functions like key() or generate-id() to finish the job.

Our First Attempt

For our first example, we’ll take our list of addresses and group them. We’ll look for all unique values of the <zip> element and list the addresses that match each one. What we’ll do is sort the list by Zip Code, then go through the list. If a given item doesn’t match the previous Zip Code, we’ll print out a heading; if it does match, we’ll just print out the address. Here’s our first attempt:

<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" indent="no"/> <xsl:variable name="newline"> <xsl:text> </xsl:text> </xsl:variable> <xsl:template match="/"> <xsl:text>Addresses sorted by Zip Code</xsl:text> <xsl:value-of select="$newline"/> <xsl:for-each select="addressbook/address"> <xsl:sort select="zip"/> <xsl:if test="zip!=preceding-sibling::address[1]/zip"> <xsl:value-of select="$newline"/> <xsl:text>Zip code </xsl:text> <xsl:value-of select="zip"/> <xsl:text> (</xsl:text> <xsl:value-of select="city"/> <xsl:text>, </xsl:text> <xsl:value-of select="state"/> <xsl:text>): </xsl:text> <xsl:value-of select="$newline"/> </xsl:if> <xsl:if test="name/title"> <xsl:value-of select="name/title"/> <xsl:text> </xsl:text> ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

Learning XSLT

Learning XSLT

Michael Fitzgerald
Inside XSLT

Inside XSLT

Steven Holzner
XSLT Cookbook

XSLT Cookbook

Sal Mangano

Publisher Resources

ISBN: 0596000537Supplemental ContentCatalog PageErrata