RE: [xsl] Sorting and re-ordering down a hierarchy

Subject: RE: [xsl] Sorting and re-ordering down a hierarchy
From: Américo Albuquerque <melinor@xxxxxxx>
Date: Tue, 22 Jul 2003 14:20:53 +0100
Hi


> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx 
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of 
> Ragulf Pickaxe
> Sent: Tuesday, July 22, 2003 9:21 AM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: [xsl] Sorting and re-ordering down a hierarchy
> 
> 
> Hi,
> 
> I did not see any response on this (except for one who said 
> he used Perl 
> instead), so I tried myself.
> The templates below, I thought would do what was wanted, but 
> I only get it 
> to sort on the 1st level, not on the second level. I do not know why.
> 
> Does anybody else have a solution, and can anyone tell me why 
> my solution 
> does not work?

In your stylesheet you have:
<xsl:apply-templates select="node">
  <xsl:sort select="node/rank" ... />
</xsl:apply-templates>

Here you are saying:
Apply templates to node "node" and sort it buy child::node/child::rank

Basicaly you are using node and sorting by node/node/rank (path from the
same parent)

What you want is
<xsl:apply-templates select="node">
  <xsl:sort select="rank" ... />
</xsl:apply-templates>

That way you select node and sort it by node/rank (path from the same
parent)

Hope this helps you.

> 
> Regards,
> Ragulf Pickaxe :)
> 
> 
> <xsl:template match="/">
> 	<output>
> 	<xsl:apply-templates select="input"/>
> 	</output>
> </xsl:template>
> 
> <xsl:template match="input">
> 	<xsl:apply-templates select="node">
> 		<xsl:sort select="node/rank" data-type="number" 
> order="ascending"/>
> 	</xsl:apply-templates>
> </xsl:template>
> 
> <xsl:template match="node">
> 	<node>
> 	<xsl:copy-of select="rank"/>
> 	<xsl:apply-templates select="node">
> 	<xsl:sort select="node/rank" data-type="number" 
> order="ascending"/>
> 	</xsl:apply-templates>
> 	</node>
> </xsl:template>
> 
> 
> ><input>
> ><node>
> >     <rank>2</rank>
> >     <node>
> >         <rank>88</rank>
> >     </node>
> >     <node>
> >         <rank>7</rank>
> >     </node>
> >     <node>
> >         <rank>66</rank>
> >     </node>
> ></node>
> ><node>
> >     <rank>1</rank>
> >     <node>
> >         <rank>3</rank>
> >     </node>
> >     <node>
> >         <rank>2</rank>
> >     </node>
> >     <node>
> >         <rank>1</rank>
> >     </node>
> ></node>
> ></input>
> 
> The output I get on this is:
> <output>
>   <node>
>     <rank>1</rank>
>     <node>
>       <rank>3</rank>
>     </node>
>     <node>
>       <rank>2</rank>
>     </node>
>     <node>
>       <rank>1</rank>
>     </node>
>     </node>
>     <node>
>       <rank>2</rank>
>     <node>
>       <rank>88</rank>
>     </node>
>     <node>
>       <rank>7</rank>
>     </node>
>     <node>
>       <rank>66</rank>
>     </node>
>   </node>
> </output>
> 
> _________________________________________________________________
> MSN 8 with e-mail virus protection service: 2 months FREE* 
> http://join.msn.com/?page=features/virus
> 
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> 
> 
> 



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


Current Thread