-----Original Message-----
From: omprakash(_dot_)v(_at_)polaris(_dot_)co(_dot_)in
[mailto:omprakash(_dot_)v(_at_)polaris(_dot_)co(_dot_)in]
Sent: Thursday, June 02, 2005 3:57 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--