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

RE: Recursive Split

Subject: RE: Recursive Split
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Thu, 15 Nov 2007 08:56:40 -0000
RE:  Recursive Split
There is a two-argument version of id() in XPath 2.0. The first argument is
the ID value that you want to find, the second identifies the document that
you want to search, which defaults to "/". If the context node is an atomic
value then you need to supply the second argument.

But if it's really as simple as this:

    <xsl:variable name="item" select="tokenize($item, '\s+')"/>
    <xsl:for-each select="$item">
      <xsl:value-of select="id(.)"/>
    </xsl:for-each>

then just do 

<xsl:value-of select="for $t in tokenize($item, '\s+') return id($t)"/>

Michael Kay
http://www.saxonica.com/ 

> -----Original Message-----
> From: Alice Ju-Hsuan Wei [mailto:ajwei@xxxxxxxxxxx] 
> Sent: 15 November 2007 01:28
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: RE:  Recursive Split
> 
> Hi,
> 
>    Looks like now I am trying to use the tokenize function, 
> but it appears that it does not allow me to use id() with it. 
> When I ran the XSLT, it tells me this: F Cannot select a node 
> here: the context item is an atomic value, with the errors 
> pointing to the line where it says id(.).
> 
> 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="do" select="list">
>    <xsl:variable name="item" select="tokenize($item, '\s+')"/>
>     <xsl:for-each select="$item">
>    <xsl:value-of select="id(.)"/>
>    </xsl:for-each>
>    </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 with the id()? I do not want to print out the 
> attributes only, but I want it to print out the id of the attribute.
> 
> Thanks in advance.
> 
> Alice

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.