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

Re: xslt sort dilemna

Subject: Re: xslt sort dilemna
From: "Mohit Anchlia" <mohitanchlia@xxxxxxxxx>
Date: Wed, 10 Sep 2008 08:17:45 -0700
Re:  xslt sort dilemna
Thanks. I was thinking that sort gets applied to output if it's put
inside xsl:apply-templates, but it looks like it just works on input.
Thanks for the explanation.

Is there a way I could do this in one xslt itself?

On Tue, Sep 9, 2008 at 11:57 AM, Wendell Piez <wapiez@xxxxxxxxxxxxxxxx> wrote:
> Mohit,
>
> In order to understand where to put the xsl:sort instruction, you need to
> understand what it does. It really isn't "sorting" anything. XSLT is a
> declarative language, so any XSLT stylesheet is really a specification for
> how an XSLT processor is supposed to build its result out of its input.
> Along these lines, xsl:sort overrides the processor's ordinary behavior, in
> which the order of the results corresponds to the order of elements in the
> input from which the results are built, and instead corresponds to a sorted
> order in the input.
>
> So you're not really "apply[ing] sort" on any output, merged or not. If you
> really want to sort your output, the easiest way to do that is to run a
> second transformation in which your input is the output of the first
> transformation.
>
> And what you'd want is probably something like (what you said you've tried)
>
> <xsl:for-each select="//ret|$file2//ret">
>  <xsl:sort select="filing"  order="ascending" data-type="text"/>
>  <xsl:sort select="State" order="ascending"  data-type="number"/>
>
> Assuming your input 'ret' elements all have both 'filing' and 'State' child
> elements.
>
> Now why isn't this working? You say your sort on 'filing' is working, only
> the 'ret' elements from the two input documents are not sorted together.
> This might well be a bug in your processor, which might have evaded
> detection since this is actually a fairly rare thing to be doing. Careful
> testing can determine this, but in the meantime you might try something
> like:
>
> <xsl:variable name="merged-set" select="//ret|$file2//ret"/>
> <xsl:for-each select="$merged-set">
>  <xsl:sort ...
>
> Conceivably, this could fool the processor into treating the two sets of
> nodes as one, as you want them to be treated.
>
> Even if this works, you should tell us what processor you are using so that
> others may try to duplicate the bug, if that's what it is. (Several
> developers of processors monitor this list to see what bugs might be
> reported.)
>
> As to why your sort on 'State' elements is not working, you need to show us
> your input data (again?) if we are to see what could be going wrong there.
> Without seeing the input (which you should post in reduced form with your
> question, so the email is self-contained and does not require us to look
> back in the archive ), it's really impossible to know anything for certain.
>
> Cheers,
> Wendell
>
>
> At 02:10 PM 9/9/2008, you wrote:
>>
>> I have 2 xml that I am merging, something like this:
>>
>>          <xsl:for-each select="//ret|$file2//ret">
>>             <xsl:element name="{name()}" namespace="{namespace-uri()}">
>>              <xsl:apply-templates>
>>                <xsl:sort select="filing"  order="ascending"
>> data-type="text"/>
>>                <xsl:sort select="State" order="ascending"
>>  data-type="number"/>
>>              </xsl:apply-templates>
>>             </xsl:element>
>>          </xsl:for-each>
>>
>>
>> Couple of questions:
>> 1. Above xsl:for-each merges 2 xml documents. Now I want to apply sort
>> on the merged output. I tried putting sort inside apply-templates as
>> well as moving inside for-each. It doesn't seem to work. I am trying
>> to sort on 2 elements. Is there a way I can sort on merged output.
>>
>> 2. Also, when I put sort in for-each it sort only one document at a
>> time, but second sort on "State" doesn't work.
>
>
> ======================================================================
> 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
> ======================================================================

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.