OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.


Help: OASIS Mailing Lists Help | MarkMail Help

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: multiple attribute values in XSL

On Fri, May 11, 2001 at 04:33:11PM +0200, Lyndon J B Nixon wrote:
> hi,
> i couldnt find any help on this online, so i hope someone on list can give 
> me some pointers
> i want to transform a XML tag with an attribute with multiple values into 
> multiple tags each of which is determined by each
> of the attribute values, eg.
> <X position="1,2,3"/>
> is transformed by XSLT into
> <Y value="1"/>
> <Y value="2"/>
> <Y value="3"/>
> is there a way to do this?


Here's a sample transform.  If you have trouble deciphering this, 
please read up on recursion, or better yet, a good text on LISP or Scheme.

<xsl:template match="X">
 <xsl:call-template name="emit-Y">
  <xsl:with-param name="first" select="substring-before(@position, ',')"/>
  <xsl:with-param name="rest" select="substring-after(@position, ',')"/>

<xsl:template name="emit-Y">
 <xsl:param name="first"/>
 <xsl:param name="rest"/>

 <Y value="{$first}"/>

 <xsl:if test="$rest">
   <xsl:when test="contains($rest, ',')">
    <xsl:call-template name="emit-Y">
     <xsl:with-param name="first" select="substring-before($rest,',')"/>
     <xsl:with-param name="rest" select="substring-after($rest,',')"/>
    <xsl:call-template name="emit-Y">
     <xsl:with-param name="first" select="$rest"/>