File: Data.xml <?xml version="1.0"?> <!-- names.xml --> <addressbook> <address> <name> <title>Mr.</title> <first-name>Doris</first-name> <last-name>Smith</last-name> </name> <street>1234 Main Street</street> <city>New York</city> <state>WI</state> <zip>48392</zip> </address> <address> <name> <title>Ms.</title> <first-name>Jane</first-name> <last-name>Lee</last-name> </name> <street>930-A Chestnut Street</street> <city>Twincity</city> <state>MA</state> <zip>02930</zip> </address> </addressbook> File: Transform.xslt <?xml version="1.0"?> <!-- namegrouper2a.xsl --> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="no"/> <xsl:strip-space elements="*"/> <xsl:template match="/"> <addressbook> <xsl:for-each select="addressbook/address"> <xsl:sort select="zip"/> <xsl:copy-of select="."/> </xsl:for-each> </addressbook> </xsl:template> </xsl:stylesheet> Output: <?xml version="1.0" encoding="UTF-8"?><addressbook><address><name><title>Ms.</title><first-name>Jane</first-name><last-name>Lee</last-name></name><street>930-A Chestnut Street</street><city>Twincity</city><state>MA</state><zip>02930</zip></address><address><name><title>Mr.</title><first-name>Doris</first-name><last-name>Smith</last-name></name><street>1234 Main Street</street><city>New York</city><state>WI</state><zip>48392</zip></address></addressbook>