Re: [xsl] How to assign a sequence to a variable?

Subject: Re: [xsl] How to assign a sequence to a variable?
From: andrew welch <andrew.j.welch@xxxxxxxxx>
Date: Tue, 9 Aug 2005 14:45:16 +0100
> Hi list,
> I would like to return a sequence from a named
> template, but I'm only getting a single string.
> In the test only tempa gets the sequence, but how
> to get it work for tempb and tempc?
>
> <?xml version="1.0" encoding="UTF-8" ?>
> <xsl:stylesheet version="2.0"
>         xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> <xsl:template match="/">
>         <xsl:variable name="tempa" select="'a1','a2','a3'"/>
>         <xsl:message select="$tempa[3]"/>
>         <xsl:variable name="tempb">
>                 <xsl:value-of select="'b1','b2','b3'"/>
>         </xsl:variable>
>         <xsl:message select="$tempb[1]"/>
>         <xsl:variable name="tempc">
>                 <xsl:call-template name="processName">
>                 </xsl:call-template>
>         </xsl:variable>
>         <xsl:message select="$tempc[1]"/>
> </xsl:template>
> <xsl:template name="processName">
>         <xsl:value-of select="'c1','c2','c3'"/>
> </xsl:template>
> </xsl:stylesheet>

You need as item()+ on the variable definition, eg:

<xsl:variable name="tempb" as="item()+">
  ....

Otherwise you will get a tree with a single child text node with all
the entries in the sequence concatenated together with a space between
each.

cheers
andrew

Current Thread