Another Example
We’ve pretty much covered the <xsl:sort>
element at this point. To
add another wrinkle to our example, we’ll change the stylesheet so the
xsl:sort
element acts upon a subset
of the addresses, and then sorts that subset. We’ll sort only the
addresses from states that start with the letter M
. As you’d expect, we’ll do this magic with
an XPath expression that limits the elements to be sorted:
<?xml version="1.0"?> <!-- namesorter4.xsl --> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" indent="no"/> <xsl:template match="/"> <xsl:for-each select="addressbook/address[starts-with(state, 'M')]"> <xsl:sort select="name/last-name"/> <xsl:sort select="name/first-name"/> <xsl:if test="name/title"> <xsl:value-of select="name/title"/> <xsl:text> </xsl:text> </xsl:if> <xsl:value-of select="name/first-name"/> <xsl:text> </xsl:text> <xsl:value-of select="name/last-name"/> <xsl:text>
</xsl:text> <xsl:value-of select="street"/> <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="zip"/> <xsl:text>
</xsl:text> <xsl:text>
</xsl:text> </xsl:for-each> </xsl:template> </xsl:stylesheet>
Here are the results—only those addresses from states beginning
with the letter M
, sorted by first
name within last name:
Ms. Natalie Attired 707 Breitling Way Winter Harbor, ME 00218 Harry Backstayge 283 First Avenue Skunk Haven, MA 02718 ...
Get XSLT, 2nd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.