Subject: Re: [xsl] Using a parameter in a select within a recursive template From: Josh Canfield <joshcanfield@xxxxxxxxx> Date: Tue, 21 Sep 2004 14:37:23 -0700 |
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 <= $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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Using a parameter in a se, M. David Peterson | Thread | RE: [xsl] Using a parameter in a se, Michael Kay |
RE: [xsl] How to simplify this?, Passin, Tom | Date | [xsl] Access Root Node from namespa, Karl J. Stubsjoen |
Month |