xsl-list
[Top] [All Lists]

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

2007-02-06 08:13:33
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

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--