File: Data.xml
<?xml version="1.0" encoding="US-ASCII"?>
<?xml-stylesheet href="Transform.xslt" type="text/xsl"?>
<uscities>
<western>
<uscity state="Nevada">Las Vegas</uscity>
<uscity state="Arizona">Phoenix</uscity>
<uscity state="California">San Francisco</uscity>
<uscity state="Nevada">Silver City</uscity>
<uscity state="Washington">Seattle</uscity>
<uscity state="Montana">Missoula</uscity>
</western>
</uscities>
File: Transform.xslt
<?xml version="1.0" encoding="US-ASCII"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" />
<xsl:key name="list" match="uscity" use="@state" />
<xsl:template match="/">
<html>
<head>
<title>Western State Cities</title>
</head>
<body>
<xsl:for-each
select="/uscities/western/uscity[generate-id(.)=generate-id(key('list', @state))]/@state">
<xsl:sort />
<h2>
<xsl:value-of select="." />
</h2>
<ul>
<xsl:for-each select="key('list', .)">
<xsl:sort />
<li>
<xsl:value-of select="." />
</li>
</xsl:for-each>
</ul>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Output:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Western State Cities</title>
</head><body>
<h2>Arizona</h2>
<ul>
<li>Phoenix</li>
</ul>
<h2>California</h2>
<ul>
<li>San Francisco</li>
</ul>
<h2>Montana</h2>
<ul>
<li>Missoula</li>
</ul>
<h2>Nevada</h2>
<ul>
<li>Las Vegas</li>
<li>Silver City</li>
</ul>
<h2>Washington</h2>
<ul>
<li>Seattle</li>
</ul>
</body>
</html>
|