RE: [xsl] Recursive Split

Subject: RE: [xsl] Recursive Split
From: "Angela Williams" <Angela.Williams@xxxxxxxxxxxxxxxxxx>
Date: Wed, 14 Nov 2007 10:12:17 -0600
Instead of substring-after, try tokenize() to split the string in list
on the space into a sequence of strings.

<xsl:variable name="list-items" select="tokenize($item , '\s+' )"/>

Then you can iterate through list-items to do what you need:
<xsl:for-each select="$list-items">
  item is: [<xsl:value-of select="."/>]
</xsl:for-each>

Gives you:
        item is: [milk]

        item is: [cheese]

        item is: [vegetables]

        item is: [beef]


Thanks!
Angela

-----Original Message-----
From: Alice Ju-Hsuan Wei [mailto:ajwei@xxxxxxxxxxx]
Sent: Wednesday, November 14, 2007 9:00 AM
To: xsl-list
Subject: [xsl] Recursive Split

Hi,

  Does anyone know if it is possible to do recursive splitting of
strings and output them with appropriate ids? I tried using
substring-before and substring-after, but I can only be applied once, so
when I have multiple elements I wanted to split, it does not provide the
accurate output.

Here is my XML:

              <listItem>
                   <to_do xml:id="cheese">Cheddar Cheese</to_do>
               </listItem>
                <listItem>
                   <to_do xml:id="beef">Chuck Steak</to_do>
               </listItem>
                <listItem>
                   <to_do xml:id="vegetables">Brocoli, Beans,
Carrots</to_do>
               </listItem>
               <listItem>
                   <to_do xml:id="milk">Dean's Low Fat Milk 2%</to_do>
               </listItem>

  <do>
  <date>2007-11-14</date>
  <list>milk cheese vegetables beef</list>
  <limit_price>20</limit_price>
  <do>

  Current XSL:

<xsl:template name="do_list">
     <xsl:variable name="item" select="list"/>
     <xsl:variable name="tasks" select="substring-after($item, ' ')"/>
       <xsl:choose>
           <xsl:when test="contains($item,' '
                  <xsl:value-of select="id($item)"/>
                   </xsl:when>
           <xsl:otherwise>
               <xsl:apply-templates select="$item"/>
           </xsl:otherwise>
       </xsl:choose>
   </xsl:template>

  Intended Output in HTML:

     <ul>
                   <li>Cheddar Cheese</li>
                  <li>Chuck Steak</li>
                  <li>Brocololi, Beans, Carrots</li>
                  <li>Dean's Low Fat Milk 2%</li></ul>

   Is it possible to parse these elements in the XML recursively?

Thanks in advance.

Alice

Current Thread