Subject: RE: [xsl] Sort Question From: "Simon, Jb" <jb.simon@xxxxxxxx> Date: Mon, 06 Jun 2005 10:57:26 -0400 |
> -----Original Message----- > From: omprakash.v@xxxxxxxxxxxxx [mailto:omprakash.v@xxxxxxxxxxxxx] > Sent: Thursday, June 02, 2005 3:57 AM > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: Re: [xsl] Sort Question > <snip> > Next, the Range_Type should be > > RANGE_TYPE ( UINT8, ColorType, Red, White ) ; > > I can't for the life of me figure out how to restucture the template > > <xsl:template match="tblEnumeratedTypes_WC" mode="range-macro"> > > > Ans: This one was a lot tougher. My original idea was to store the sorted > nodes in a variable and access the nodes using xpath expressions. But this > didn't work as I found out to my surprise that the text output method > does > not allow you create elements not even create them and bind them to a > variable. Then I found the match template for tblEnumValues_WC node was > being called in sorted order and used position() arrive at the desired > result. However, the stylesheet needs to receive the position of the last > node as a parameter or needs to compute it in a previous pass to allow the > stylesheet to scale. > > > Hope this helps. > > Cheers, > prakash > > > > <xsl:template match="tblEnumValues_WC" mode="makecopy"> > > > <xsl:choose> > <xsl:when test="position() = 1"> > <xsl:variable name="Start"> > <xsl:call-template name="removeSpaces"> > <xsl:with-param name="text" > select="EnumValueDescription"/> > </xsl:call-template> > </xsl:variable> > > <xsl:value-of select="$Start"/> > > </xsl:when> > <xsl:when test="position() = last()"> > <xsl:variable name="End" > > <xsl:call-template name="removeSpaces"> > <xsl:with-param name="text" > select="EnumValueDescription"/> > </xsl:call-template> > </xsl:variable> > > , <xsl:value-of select="$End"/>) ; > > </xsl:when> > <xsl:otherwise> > > </xsl:otherwise> > </xsl:choose> > > Prakash, The above stylesheet works fine as long as there are more than 1 nodes. If there is only one than below statement > <xsl:when test="position() = last()"> Never gets evaluated. I am attempting to repair this now... any ideas ? What I was thinking was something along the lines of the following pseudo code, although I do not know how to implement it in xsl. I hope the following makes some sense ! lastParameterWritten=false Choose When test="position()=1" Write first parameter End when When test="position()=last()" Write last parameter Set lastParameterWritten = true End when End Choose If test="lastParameterWritten=false" Write currentParameter as last End if Thanks Joe
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Sort Question, Simon, Jb | Thread | RE: [xsl] Sort Question, omprakash . v |
RE: [xsl] Math: Removing X number o, tomas.vanek | Date | [xsl] parameter oddness, Bruce D'Arcus |
Month |