Hi again,
I found an answer: passing parameters in the template calls all the way down
to the point I need them.
I'm pretty sure my code looks aweful at this point but it works. If anyone
has any tips on how I could optimise the routine I'm all ears.
-Thomas
-------[BEGIN SOURCE XSL]--------
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" doctype-public="-//W3C//DTD HTML 4.0
Transitional//EN"/>
<xsl:key name="artists" match="mp3" use="artist/displayname" />
<xsl:key name="albums" match="mp3" use="album/displayname" />
<xsl:key name="artists_albums" match="mp3" use="concat(artist/displayname, '
',
album/displayname)"
/>
<xsl:template match="mp3list">
<html>
<head>
<style>
.header { font-size: larger; font-weight: bold; cursor: hand;
cursor:pointer;
background-color:#cccccc; font-family: Verdana; }
.details { background-color:#eeeeee; font-family: Verdana; }
.fadeout { color:#F0C2BB; }
</style>
</head>
<body>
<xsl:for-each select="mp3[count(. | key('artists',
artist/displayname)[1]) = 1]">
<xsl:sort select="artist/displayname" />
<xsl:variable name="top_artist" select="artist/displayname" />
<h1><xsl:value-of select="$top_artist" /></h1>
<xsl:variable
name="album_items"
select="key('artists', artist/displayname)" />
<xsl:for-each select="$album_items[generate-id() =
generate-id(key('artists_albums', concat(artist/displayname, ' ',
album/displayname))[1])]">
<xsl:sort select="album/displayname" />
<xsl:call-template name="album_title"/>
<xsl:call-template name="album_content">
<xsl:with-param name="passed_param">
<xsl:value-of select="$top_artist"/>
</xsl:with-param>
</xsl:call-template>
</xsl:for-each>
</xsl:for-each>
<xsl:call-template name="page_footer"/>
</body>
</html>
</xsl:template>
<xsl:template name="album_title">
<xsl:element name="h3">
<xsl:attribute name="id"><xsl:value-of select="concat('h',generate-id(.))"
/></xsl:attribute>
<xsl:attribute name="class">header</xsl:attribute>
<xsl:value-of select="album/displayname" />
</xsl:element>
</xsl:template>
<xsl:template name="album_content">
<xsl:param name="passed_param"/>
<xsl:element name="div">
<xsl:attribute name="id"><xsl:value-of
select="concat('d',generate-id(.))" /></xsl:attribute>
<xsl:attribute name="class">details</xsl:attribute>
<table>
<tr>
<th>No.</th>
<th>Title</th>
<th>Length</th>
<th>bitrate</th>
<th>vbr</th>
</tr>
<xsl:for-each select="key('albums', album/displayname)">
<xsl:sort select="trackindex" data-type="number"/>
<tr>
<xsl:call-template name="highlighter">
<xsl:with-param name="passed_param">
<xsl:value-of select="$passed_param"/>
</xsl:with-param>
</xsl:call-template>
<td><xsl:number format="01 " value="trackindex"/></td>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="length"/></td>
<td><xsl:value-of select="bitrate"/></td>
<td><xsl:value-of select="vbr"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:element>
</xsl:template>
<xsl:template name="highlighter">
<xsl:param name="passed_param" select="'Default Data'"/>
<xsl:if test="$passed_param != artist/displayname">
<xsl:attribute name="class">fadeout</xsl:attribute>
</xsl:if>
</xsl:template>
<xsl:template name="page_footer">
<hr/>
</xsl:template>
</xsl:stylesheet>
-------[END SOURCE XSL]--------