Subject: Re: [xsl] xslt sort dilemna From: "Mohit Anchlia" <mohitanchlia@xxxxxxxxx> Date: Wed, 10 Sep 2008 08:17:45 -0700 |
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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] xslt sort dilemna, Wendell Piez | Thread | Re: [xsl] xslt sort dilemna, Wendell Piez |
Re: [xsl] Complicated next for-each, Martin Honnen | Date | Re: [xsl] xslt sort dilemna, Wendell Piez |
Month |