substring(string, offset, length)
1 is the first character
length is optional
Node-sets are automatically converted to their values
<xsl:template match="composition">
<h3><xsl:number value="position()"/>.
<a name="{generate-id()}">
<xsl:value-of select="title"/>
</a>
</h3>
<ul>
<xsl:if test="date">
<!--not Y10K safe! -->
<li><xsl:value-of select="substring(date,2,4)"/></li>
</xsl:if>
<xsl:if test="length">
<li><xsl:value-of select="length"/></li>
</xsl:if>
<xsl:if test="instruments">
<li><xsl:value-of select="instruments"/></li>
</xsl:if>
<xsl:if test="publisher">
<li><xsl:value-of select="publisher"/></li>
</xsl:if>
</ul>
<p><xsl:apply-templates select="description"/></p>
</xsl:template>