Hey Mick,
It may not be ideal, but this works:
<xsl:for-each select="//line/child::*">
<xsl:choose>
<xsl:when test="name()='word' and
name(following-sibling::*[1])='word'"><xsl:value-of select="."/><xsl:text>
</xsl:text></xsl:when>
<xsl:when test="name()='word'"><xsl:value-of select="."/></xsl:when>
<xsl:when test="name()='nospace'">_</xsl:when>
</xsl:choose>
</xsl:for-each>
If nothing else it's a back-door if you get stuck!
-Jeff
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list