Sample XSLT File for XSLT Keys
Some topics in this section use the following file.
XSLT File (lib_cat.xsl)
<?xml version='1.0'?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:key name="categ_key" match="book" use="category"/> <xsl:key name="author_key" match="book" use="author"/> <xsl:template match="/"> <html> <head> <title>Scootney Publishing: Special Exhibit</title> <style> h1 {font-family: Arial,Helvetica,Univers,sans-serif; font-size: 18pt; font-weight: bold; background-color: teal; width: 75%} h2 {font-family: Arial,Helvetica,Univers,sans-serif; font-size: 14pt; font-weight: bold; background-color: white; width: 75%} h3 {font-family: Arial,Helvetica,Univers,sans-serif; font-size: 12pt; font-weight: bold; background-color: gold; width: 75%; border-width: 1; border-style: solid} </style> </head> <body> <h1>Scootney Publishing: Special Exhibit Catalog</h1> <xsl:apply-templates select="lib_cat" mode="grp_categ"/> <xsl:apply-templates select="lib_cat" mode="grp_author"/> </body> </html> </xsl:template> <xsl:template match="lib_cat" mode="grp_categ"> <h2>Titles Grouped by Category</h2> <xsl:for-each select="book[count(. | key('categ_key', category)[1])=1]"> <h3><xsl:value-of select="category" /></h3> <xsl:for-each select="key('categ_key', category)"> <xsl:sort select="title"/> <table border="0" width="75%"> <tr> <th width="10%" align="right">Title</th> <td width="90%" align="left"><xsl:value-of select="title" /></td> </tr> <tr> <th width="10%" align="right">Author</th> <td width="90%" align="left"><xsl:value-of select="author" /></td> </tr> <tr> <th width="10%" align="right">Copyright</th> <td width="90%" align="left"><xsl:value-of select="copyright" /></td> </tr> <tr> <th width="10%" align="right">Pages</th> <td width="90%" align="left"><xsl:value-of select="pages" /></td> </tr> <tr> <th width="10%" align="right" valign="top">Summary</th> <td width="90%" align="left" valign="top"><xsl:value-of select="description" /></td> </tr> </table> <hr width="75%" align="left"/> </xsl:for-each> </xsl:for-each> </xsl:template> <xsl:template match="lib_cat" mode="grp_author"> <h2>Titles Grouped by Author</h2> <xsl:for-each select="book[generate-id() = generate-id(key('author_key', author)[1])]"> <xsl:sort select="author"/> <h3><xsl:value-of select="author" /></h3> <xsl:for-each select="key('author_key', author)"> <xsl:sort select="title"/> <table border="0" width="75%"> <tr> <th width="10%" align="right">Title</th> <td width="90%" align="left"><xsl:value-of select="title" /></td> </tr> <tr> <th width="10%" align="right">Category</th> <td width="90%" align="left"><xsl:value-of select="category" /></td> </tr> <tr> <th width="10%" align="right">Copyright</th> <td width="90%" align="left"><xsl:value-of select="copyright" /></td> </tr> <tr> <th width="10%" align="right">Pages</th> <td width="90%" align="left"><xsl:value-of select="pages" /></td> </tr> <tr> <th width="10%" align="right" valign="top">Summary</th> <td width="90%" align="left" valign="top"><xsl:value-of select="description" /></td> </tr> </table> <hr width="75%" align="left"/> </xsl:for-each> </xsl:for-each> </xsl:template> </xsl:stylesheet>