xsl-list
[Top] [All Lists]

RE: Combination of normalize-space() and apply-templates

2004-02-26 03:42:09
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



<Prev in Thread] Current Thread [Next in Thread>