This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
sorting question
- To: <xsl-list at lists dot mulberrytech dot com>
- Subject: [xsl] sorting question
- From: "Oliver Rutherfurd" <fruhstuck at rutherfurd dot net>
- Date: Wed, 7 Mar 2001 14:34:36 -0500
- Reply-To: xsl-list at lists dot mulberrytech dot com
Hello,
I'm trying to transform a list of elements into a sorted set of pairs, and
haven't
been able to determine how to get the 'next' sorted element relative to the
current
position. As I couldn't get it to work with 'real' data, I simplified it to
make it easier to play with (and explain). Below is a little xml and the
xsl
I'm trying to use. Any tips or hints would be great!
here's a little data:
<ALPHABET>
<LETTER>a</LETTER>
<LETTER>d</LETTER>
<LETTER>b</LETTER>
<LETTER>c</LETTER>
</ALPHABET>
I would like results like:
(a,b)(c,d)
The following selects the second element based on it's position in nodeset,
not the sorted nodeset.
<xsl:variable name="letters" select="/ALPHABET/LETTER" />
<xsl:for-each select="$letters">
<xsl:sort select="." />
<xsl:if test="(position() mod 2) = 1">
<xsl:variable name="next_index" select="number(position() + 1)" />
<!--[<xsl:value-of select="position()" />,<xsl:value-of
select="$next_index" />]-->
(<xsl:value-of select="." />,<xsl:value-of select="$letters[$next_index]"
/>)
</xsl:if>
</xsl:for-each>
I checked out the xsl faq, and I found a posting of
Jeni's that showed how to copy a sorted list into a variable, but
it doesn't seem to be working for me.
(I'm using MSXML3 in case that matters...)
<xsl:variable name="letterlist">
<xsl:for-each select="/ALPHABET/LETTER">
<xsl:sort select="." />
<xsl:copy-of select="." />
</xsl:for-each>
</xsl:variable>
<!-- nothing comes out... -->
<xsl:value-of select="$letterlist" />
Thanks,
-Ollie Rutherfurd
fruhstuck@rutherfurd.net
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list