[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: XSLT2, select nodes inside a tokenize()'d variable

Subject: Re: XSLT2, select nodes inside a tokenize()'d variable
From: "Andrew Welch" <andrew.j.welch@xxxxxxxxx>
Date: Wed, 20 Dec 2006 14:01:03 +0000
tokenize xslt2
On 12/20/06, James Cummings <cummings.james@xxxxxxxxx> wrote:
Hiya, I'm sure I'm just looking at this upside down, but here goes:

I want to do something like this:

<xsl:template name="makeSegLabel">
<xsl:variable name="ana" select="tokenize(@ana, '(\s+)')"/>
<xsl:for-each select="$ana">
  <xsl:value-of select="."/><xsl:text>:</xsl:text>
  <xsl:value-of select="//category[@id = .]/catDesc"/>
</xsl:for-each>
</xsl:template>

Where I want to tokenize the ana attribute on the element which called
this template, and then for each whitespace separated value, I want to
put it out, and then go get a description of what that value means
from elsewhere in the document.

However, I'm rightly told that I cannot select a node here because the
context is an atomic value.

I'm sure I'm being stupid and there is a better way to do this.

No, this is the right way - you just need to maintain a pointer the content node (or root) outside of the tokenize, for example:

<xsl:template name="makeSegLabel">
 <xsl:variable name="ana" select="tokenize(@ana, '(\s+)')"/>
 <xsl:variable name="this" select="."/>
 <xsl:for-each select="$ana">
   <xsl:value-of select="$this"/>

Also, you really ought to be using a key instead of:

<xsl:value-of select="//category[@id = .]/catDesc"/>

eg:

<xsl:key name="cat-by-id" match="category" use="@id"/>


Ultimately it could all be rewritten as:


<xsl:variable name="ana" select="tokenize(@ana, '(\s+)')"/>
<xsl:value-of select="for $x in $ana return string-join(concat($x,':',
key('cat-by-id', $x)/catDesc), ', ')"/>


cheers andrew

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.