[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: breaking string into substrings or arrays (XSLT 1.

Subject: Re: breaking string into substrings or arrays (XSLT 1.0 solution)
From: JBryant@xxxxxxxxx
Date: Tue, 19 Apr 2005 11:21:59 -0500
xslt instring
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@xxxxxxxxx> 
04/19/2005 10:56 AM
Please respond to
xsl-list@xxxxxxxxxxxxxxxxxxxxxx


To
xsl-list@xxxxxxxxxxxxxxxxxxxxxx
cc

Subject
Re:  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
________________________________________________________________________

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.