<xsl:template match="composition">
<h3><xsl:value-of select="name"/> by <xsl:value-of select="composer"/> </h3>
<ul>
<xsl:if test="string(date)">
<!--not Y10K safe! -->
<li><xsl:value-of select="substring(date,2,4)"/></li>
</xsl:if>
<xsl:if test="string(length)">
<li><xsl:value-of select="length"/></li>
</xsl:if>
<xsl:if test="string(instruments)">
<li><xsl:value-of select="instruments"/></li>
</xsl:if>
<xsl:if test="string(publisher)">
<li><xsl:value-of select="publisher"/></li>
</xsl:if>
</ul>
<p><xsl:value-of select="description"/></p>
</xsl:template>
substring(string, offset, length)
1 is the first character
length is optional
node sets are automatically converted to their values