RE: [xsl] Node-List in Variables

Subject: RE: [xsl] Node-List in Variables
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Fri, 2 May 2003 11:08:59 +0100
Firstly, you don't need to write this. It's been done before: see
http://www.exslt.org/str/functions/tokenize/str.tokenize.template.xsl

(use "view source" in your browser if nothing shows).

But the only thing wrong with your code, as far as I can see, is that
the variable $tlist is not a sequence of elements, but a document node
that is the owner of that sequence of elements.

Michael Kay


> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx 
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of 
> Hayk, Matthias
> Sent: 02 May 2003 10:01
> To: 'XSL-List@xxxxxxxxxxxxxxxxxxxxxx'
> Subject: [xsl] Node-List in Variables
> 
> 
> Hello,
> 
> i want to tokenize a string, delimited  with a special 
> character, into its tokens and want this tokens to be a 
> result-tree which i can handle with an xsl:for-each.
> 
> myexample
> the first xsl:variable call the template tokenizer which 
> creates the t1-elements recursivly for all string elements 
> (a, b and c). i would expect that the variable tlist contains 
> <t1>a</t1><t1>b</t1><t1>c</t1> which i then want to work on 
> with the xsl:for-each, but the xslt-processor gives the error 
> that the expression in xsl:for-each must evaluate to a 
> node-set. if i use the ms-xslt-nodeset function i get only 
> one node which contains the textvalues of the elements ( in 
> my example it containt abc). so it seems, that tlist only 
> contains a string.
> 
> any idea what is wrong and how i can achieve my goal?
> 
> regards
> matthias 
> 
> 
> <xsl:variable name="tlist">
> 	<xsl:call-template name="tokenizer">
> 		<xsl:with-param name="tokenstr" select="a|b|c|"/>
> 	 </xsl:call-template>
> </xsl:variable>
> 
> <xsl:for-each select="$tlist">
> 	<xsl:value-of select="."/>
> </xsl:for-each>	
> 
> 
> <xsl:template name="tokenizer">
> 	<xsl:param name="tokenstr"/>
> 	
> 	<xsl:variable name="akttoken" 
> select="normalize-space(substring-before($tokenstr,'|'))"/>
> 	<xsl:if test="string-length($akttoken) &gt; 0">
> 		<!-- Ist noch nen Token da -->
> 		<xsl:element name="t1">
> 			<xsl:value-of select="$akttoken"/>
> 		</xsl:element>
> 		<xsl:call-template name="tokenizer">
> 			<xsl:with-param name="tokenstr" 
> select="substring-after($tokenstr,'|')"/>
> 		</xsl:call-template>
> 	</xsl:if>
> </xsl:template>
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> 


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread