Hi,
I am using xsltroc (from libxslt 1.1.0). When I m trying to normalize
the space in certain elements, I got stuck since I couldn't
figure out,
how to apply normalize-space() and apply templates for
elements within a
node. Example:
<document>
<para>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 <emp>within</emp>
which should also be processed.
</para>
<document>
If I write a template like this:
<xsl:template match="document">
<xsl:apply-templates select="normalize-space(para)" />
</xsl:template>
It doesn't work. But if I do it this way:
<xsl:template match="document">
<xsl:apply-templates select="para" />
</xsl:template>
<xsl:template match="para">
<xsl:value-of select="normalize-space(para)" />
</xsl:template>
It worked, but the inline element won't get processed.
Did you want something in the lines of
<xsl:template match="para/text()">
<xsl:if test="preceding-sibling::node()">
<xsl:text> </xsl:text>
</xsl:if>
<xsl:value-of select="normalize-space()"/>
<xsl:if test="following-sibling::node()">
<xsl:text> </xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
Cheers,
Jarno - Chris C: The Zurich Mix
<http://mp3.hardnrg.com/chrisc/ChrisC-The_Zurich_Mix-June_2003.mp3>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list