xsl-list
[Top] [All Lists]

Re: breaking string into substrings or arrays (XSLT 1.0 solution)

2005-04-19 09:21:59
To expand on David's approach, here's an XSLT 1.0 solution for the string 
you gave us. You'll need to expand it to handle all the other delimiters 
you didn't mention, and you probably don't want to apply it to to your 
entire source document, as this does (I used that single element you 
provided as the entire document).

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

  <xsl:template match="/">
    <chunks>
      <xsl:call-template name="stringChunks">
        <xsl:with-param name="inString" 
select="normalize-space(translate(., '[].,;:', '      '))"/>
      </xsl:call-template>
    </chunks>
  </xsl:template>

  <xsl:template name="stringChunks">
    <xsl:param name="inString"/>
    <xsl:choose>
      <xsl:when test="contains($inString, ' ')">
        <chunk><xsl:value-of select="substring-before($inString, ' 
')"/></chunk>
        <xsl:call-template name="stringChunks">
          <xsl:with-param name="inString" 
select="substring-after($inString, ' ')"/>
        </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
        <chunk><xsl:value-of select="$inString"/></chunk>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

</xsl:stylesheet>

Tested with Saxon 8.4 and Xalan-J 2.4.1 (since it's XSLT 1.0)

Jay Bryant
Bryant Communication Services
(presently consulting at Synergistic Solution Technologies)




David Carlisle <davidc(_at_)nag(_dot_)co(_dot_)uk> 
04/19/2005 10:56 AM
Please respond to
xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com


To
xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
cc

Subject
Re: [xsl] breaking string into substrings or arrays







In my project I am dealing with at least 10 delimeters ? 

If you don't need to do different things for different delimiters, then:
 
The XPath2 tokenize function allows the delimiter to be specified by a
regular expression, so in that case you can just specify whatever you
want, eg ^[a-zA-Z]+ for any run of non (ascii) letters being a
delimiter.

If using xslt1 substring function it's easier to normalise first:
<xsl:variable name="x" select="normalize-space(translate(Value,',;.[]','  
'))"/>
would give a value of $x as
"Alpha Beta Gamma Alpha Beta"
given your posted input, which you then pass to an XSLT1 tokenizing
template.

David

________________________________________________________________________
This e-mail has been scanned for all viruses by Star. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk
________________________________________________________________________

--~------------------------------------------------------------------
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>
--~--




--~------------------------------------------------------------------
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>
--~--



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