[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.
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 ________________________________________________________________________
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|