Fw: [xsl] substring after/substring before

Subject: Fw: [xsl] substring after/substring before
From: Hermann Stamm-Wilbrandt <STAMMW@xxxxxxxxxx>
Date: Sat, 28 Mar 2009 13:51:46 +0100
> ...
> With XSLT 1.0, the solution will be a bit lengthier. for e.g., you can
> used a named template to tokenize the string recursively, and get the
> result.

It does not need to be lengthier if your XSLT 1.0 processor supports
regexp:replace() EXSLT function -- DataPower processor does.

And it should be more efficient than recursive stylesheet calls.


<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
  xmlns:regexp="http://exslt.org/regular-expressions";
>
  <xsl:output method="xml" />

  <xsl:template match="/">
    <xsl:variable name="fname" select="regexp:replace
(.,' [^ ]*$','g','')" />
    <xsl:variable name="lname" select="substring-after(.,concat($fname,'
'))" />

    <xsl:value-of select="$fname" />#<xsl:value-of select="$lname" />
  </xsl:template>
</xsl:stylesheet>


Mit besten Gr|_en / Best wishes,

Hermann Stamm-Wilbrandt
Developer, XML Compiler
WebSphere DataPower SOA Appliances
----------------------------------------------------------------------
IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Martin Jetter
Geschdftsf|hrung: Erich Baier
Sitz der Gesellschaft: Bvblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294
----- Forwarded by Hermann Stamm-Wilbrandt/Germany/IBM on 03/28/2009 01:46
PM -----

             Mukul Gandhi
             <gandhi.mukul@gma
             il.com>                                                    To
                                       xsl-list@xxxxxxxxxxxxxxxxxxxxxx
             03/28/2009 12:38                                           cc
             PM
                                                                   Subject
                                       Re: [xsl] substring after/substring
             Please respond to         before
             xsl-list@xxxxxxxx
              lberrytech.com








With XSLT 2.0 this can done as following:

<xsl:variable name="str" select="'A. B. C. Surname'" />
<xsl:variable name="tokenList" select="tokenize($str, '\s+')" />
<xsl:variable name="fname" select="string-join($tokenList[position()
&lt; last()], ' ')" />
<xsl:variable name="lname" select="$tokenList[last()]" />

<fnm><xsl:value-of select="$fname" /></fnm>
<snm><xsl:value-of select="$lname" /></snm>

With XSLT 1.0, the solution will be a bit lengthier. for e.g., you can
used a named template to tokenize the string recursively, and get the
result.

On Sat, Mar 28, 2009 at 2:06 PM, Joga Singh Rawat <jrawat@xxxxxxxxxxxxxx>
wrote:
> Hi List,
>
> Can I spilit a string into two parts by last space as substring-before(.,
'
>
> '[last()]) is not getting accurate result.
>
>
> Input :
>
> A. B. C. Surname
>
>
> Output:
>
> <fnm>A.</fnm>
>
> <snm>B. C. Surname</snm>
>
>
> Required output
>
> Output:
>
> <fnm>A. B. C.</fnm>
>
> <snm>Surname</snm>
>
>
> Anybody have any clue???
>
>
> Thanks
>
> ...JSR



--
Regards,
Mukul Gandhi

Current Thread