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

Re: Using a parameter in a select within a recursive

Subject: Re: Using a parameter in a select within a recursive template
From: Josh Canfield <joshcanfield@xxxxxxxxx>
Date: Tue, 21 Sep 2004 14:37:23 -0700
select within select
Just a minor point: 

<xsl:param name="number" select="141"/> is correctly treated as a
number because the first character of an element name must be a letter
or underscore (_)

Josh

On Sun, 19 Sep 2004 00:31:07 -0700, M. David Peterson
<m.david@xxxxxxxxxx> wrote:
> Hello again Helen :)
> 
> Yeah, this stylesheet has several things keeping it from working.  First, your
> xsl:param elements need to either not use the select attribute and just set the
> value within the opening and closing tags or use single quotes inside the select
> attribute to tell the processor to use the contents as an absolute value.  The
> way its setup right now you are telling the processor to set there value to the
> value of the elements named 141 and 19.
> 
> The second problem is that you are telling the processor to output the literal
> string value of the concatenation of the string "FIELD_" and the value of
> $number.  The way around this is to instead do a test using the local-name()
> function to compare to your concated string value and output the value of the
> element that matches...
> 
> I would try something like the following.  Note: I excluded the fo elements to
> simplify -- just add it back as needed.  I also lowered the number values of the
> number and cols params to simplify the input and output for testing.
> 
> <?xml version="1.0"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
> 
>   <xsl:template match="/">
>     <xsl:call-template name="adddata">
>       <xsl:with-param name="number" select="'5'"/>
>       <xsl:with-param name="cols" select="'0'"/>
>     </xsl:call-template>
>   </xsl:template>
> 
>   <xsl:template name="adddata">
>     <xsl:param name="number"/>
>     <xsl:param name="cols"/>
> 
>     <xsl:choose>
>       <xsl:when test="$number >= $cols">
>             <xsl:value-of select="//*[local-name() = concat('FIELD_',$number)]"/>
>         <xsl:call-template name="adddata">
>           <xsl:with-param name="number" select="$number - 1"/>
>           <xsl:with-param name="cols" select="$cols" />
>         </xsl:call-template>
>       </xsl:when>
>       <xsl:otherwise>
>         <xsl:value-of select="$cols"/>
>       </xsl:otherwise>
>     </xsl:choose>
> 
>   </xsl:template>
> </xsl:stylesheet>
> 
> Which when you process this XML:
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <fields>
>   <FIELD_1>test of field 1</FIELD_1>
>   <FIELD_2>test of field 2</FIELD_2>
>   <FIELD_3>test of field 3</FIELD_3>
>   <FIELD_4>test of field 4</FIELD_4>
>   <FIELD_5>test of field 5</FIELD_5>
> </fields>
> 
> Looks like this:
> 
> test of field 5test of field 4test of field 3test of field 2test of field 10
> 
> Hope this helps!
> 
> Best regards,
> 
> <M:D/>
> 
> 
> 
> Sean & Helen wrote:
> > Hi everyone,
> > I am attempting to use a parameter within a recursive template to select a
> > different node whenever the template loops.
> >
> > My datafile looks something like this:
> >
> > <FIELD_1>
> > <FIELD_2>
> > <FIELD_3>
> > <FIELD_4>
> > <FIELD_5>
> > ...
> > <FIELD_142>
> >
> > I would like to loop through and use the incremented parameter to select the
> > contents of the node. So far I have been trying to use this template:
> >
> > <xsl:template name="adddata">
> >      <xsl:param name="number" select="141" />
> >      <xsl:param name="cols" select="19" />
> >
> >      <xsl:choose>
> >      <xsl:when test="$number &lt;= $cols">
> >         <xsl:value-of select="cols"/>
> >      </xsl:when>
> >      <xsl:otherwise>
> >         <xsl:call-template name="adddata">
> >          <xsl:with-param name="number" select="$number - 1"/>
> >          <xsl:with-param name="cols" select="$cols" />
> >         </xsl:call-template>
> >            <fo:table-cell >
> >                <fo:block><xsl:value-of select="concat('FIELD_',$number)"
> > /></fo:block>
> >           </fo:table-cell>
> >     </xsl:otherwise>
> >   </xsl:choose>
> > </xsl:template>
> >
> > However, the output gives me:
> > FIELD_1 FIELD_2 FIELD_3 etc....
> > rather than the data contained within these nodes. Can someone shed some
> > light for me?
> >
> > TIA,
> > Helen.

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.