[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: XSL - using for-each with sort - can't access prev

Subject: Re: 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
xsl sort doesn t sort
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

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.