I'm sure the answer is obvious, but I can't seem to find it.
...
<xsl:template match="finishes">
<xsl:for-each select="finish">
<th colspan="{count(descendant::hold)}">
<xsl:value-of select="." />
</th>
</xsl:for-each>
</xsl:template>
I think what you want instead of <xsl:value-of select="." />
is <xsl:value-of select="text()" />.
This will give you the string value of all text nodes that
are immediate children of the context node.
HTH!
Lars
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list