<xsl:template match="document">
<xsl:apply-templates select="normalize-space(para)" />
</xsl:template>
It doesn't work. But if I do it this way:
normalize-space returns a string and you can't apply templates to a
string, only to nodes.
The easy thing to do is normalize each text node of the para separately,
to do that you go
<xsl:template match="para">
<p>
<xsl:apply-templates/>
</p>
</xsl:template>
<xsl:template match="emph">
<em>
<xsl:apply-templates/>
</em>
</xsl:template>
and have
<xsl:template match="para/text()">
<xsl:value-of select="normalize-space(.)"/>
</xsl:template>
However that will normalize the two text nodes separately, producing
<p>Some text, that is wrapped several times, but should be one line in the
output document. And which has -- to make it tricky -- some
Elements<em>within</em>which should also be processed.</p>
and the space around the emph has gone, so you need to put something
more like
<xsl:template match="para/text()">
<xsl:if test="preceding-sibling::* and (starts-with(.,' ') or
starts-with(.,' '))">
<xsl:text> </xsl:text>
</xsl:if>
<xsl:value-of select="normalize-space(.)"/>
<xsl:if test="following-sibling::* and (substring(.,string-length(.)-1)=' ') or
substring(.,string-length(.)-1)=' ')>
<xsl:text> </xsl:text>
</xsl:if>
</xsl:template>
--
http://www.dcarlisle.demon.co.uk/matthew
________________________________________________________________________
This e-mail has been scanned for all viruses by Star Internet. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk
________________________________________________________________________
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list