Re: [xsl] XSL - using for-each with sort - can't access previous sorted nod e

Subject: Re: [xsl] XSL - using for-each with sort - can't access previous sorted nod e
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Tue, 25 Nov 2003 18:29:54 -0500
Jeff,

Rick's tip is a good one although it doesn't address your actual problem.

The problem you posed is rather tricky, since XSLT 1.0 doesn't have ready access to its own results. The cleanest solution would therefore be to process your list in two passes, the first to sort, the second to format. The second pass then has access to the sorted order. This can be done either with two stylesheets, or with one stylesheet and your processor's node-set() extension function (most have one).

If you really want to do it in one pass, it's not impossible, but it won't be pretty.

Please advise if these hints aren't enough and you'd like more specifics on any of the options I've mentioned. I'd probably use the node-set() extension function as the best balance of simple and efficient, if I could be sure the function would be available when the stylesheet is run. (In XSLT 2.0 you'll be able to do the same thing transparently.)

Cheers,
Wendell

At 05:16 PM 11/25/2003, Rick wrote:
Jeff,

Make sure that when you sort you specify the data-type
<xsl:sort select="@page" data-type="number"/>
or the 18 will come after the 1 and before the 2.

rick

At 04:45 PM 11/25/2003 -0500, you wrote:
Hi all... just joined this list. Greetings :)

I was wondering if someone might have an answer for me on this...

Here's sample XML:

<quiz>
   <question id="1" page="4"/>
   <question id="2" page="6"/>
   <question id="3" page="1"/>
   <question id="4" page="18"/>
   <question id="5" page="7"/>
   <question id="6" page="5"/>
</quiz>

In my XSLT, I want to sort by page. So I have:

<xsl:for-each select="question">
<xsl:sort select="@page"/>

Now - as I am doing things to each question during the for-each, I want to
be able to access the "id" attribute in the question outputted JUST PRIOR to
the one currently being outputted. I can't seem to be able to do this. I've
tried using position() and <xsl:number> and combinations of the two, and
have been unsuccessful. Could anyone give me some advice?


======================================================================
Wendell Piez                            mailto:wapiez@xxxxxxxxxxxxxxxx
Mulberry Technologies, Inc.                http://www.mulberrytech.com
17 West Jefferson Street                    Direct Phone: 301/315-9635
Suite 207                                          Phone: 301/315-9631
Rockville, MD  20850                                 Fax: 301/315-8285
----------------------------------------------------------------------
  Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================


XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list


Current Thread