Re: [xsl] Move leading/trailing spaces outside (XSLT 2.0)

Subject: Re: [xsl] Move leading/trailing spaces outside (XSLT 2.0)
From: Abel Braaksma <abel.online@xxxxxxxxx>
Date: Tue, 06 Feb 2007 16:11:49 +0100
Martin Honnen wrote:
Yves Forkl wrote:

I'm looking for an elegant XSLT 2.0 solution to this tiny problem. When processing

<e> one</e>
<e>two </e>
<e> three </e>

I want to separate the leading and trailing spaces from the rest of the content but keep them in the output as text nodes,

This should do:


<xsl:template match="e">
  <xsl:analyze-string select="." regex="^\s+">
    <xsl:matching-substring>
      <xsl:value-of select="."/>
    </xsl:matching-substring>
    <xsl:non-matching-substring>
      <xsl:analyze-string select="." regex="\s+$">
        <xsl:matching-substring>
         <xsl:value-of select="."/>
        </xsl:matching-substring>
        <xsl:non-matching-substring>
          <e><xsl:value-of select="."/></e>
        </xsl:non-matching-substring>
      </xsl:analyze-string>
    </xsl:non-matching-substring>
  </xsl:analyze-string>
</xsl:template>

You can make this easier by doing it in one pass:

<xsl:analyze-string select="." regex="^\s+|\s+$">
....

Greedy matching (which it is always) will ensure that the matching-substring is always either the leading or the trailing. Non-matching-substring is always the middle part.

-- Abel

Current Thread