RE: [xsl] re-ordering nodes/partial sort

Subject: RE: [xsl] re-ordering nodes/partial sort
From: "Kevin Bird" <kevin.bird@xxxxxxxxxxxxx>
Date: Sun, 10 Oct 2004 22:29:46 +0100
Hi Anton

Many thanks for the solution, it's appreciated.

--
Kevin

PS. Thanks to David for the earlier suggestions.



> -----Original Message-----
> From: Anton Triest [mailto:anton@xxxxxxxx]
> Sent: 10 October 2004 21:05
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: [xsl] re-ordering nodes/partial sort
> 
> <?xml version="1.0" encoding="utf-8"?>
> <xsl:stylesheet version="1.0"
>     xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
>     xmlns:my="urn:mine" extension-element-prefixes="my">
> 
>     <xsl:output method="xml" version="1.0" encoding="utf-8"
indent="yes"/>
>     <xsl:strip-space elements="*"/>
> 
>     <my:priorities>
>         <my:p desc="Bed &amp; Breakfast"/>
>         <my:p desc="Bed &amp; Breakfast (child)"/>
>         <my:p desc="Half Board"/>
>         <my:p desc="Half Board (child)"/>
>         <my:p desc="Full Board"/>
>         <my:p desc="Full Board (child)"/>
>     </my:priorities>
> 
>     <xsl:variable name="priorities"
> select="document('')/xsl:stylesheet/my:priorities/my:p"/>
> 
>     <xsl:template match="/supplements">
>         <supplements>
>             <xsl:apply-templates select="supp">
>                 <xsl:sort
> select="count($priorities[@desc=current()/supp-desc]/preceding::*)"/>
>             </xsl:apply-templates>
>         </supplements>
>     </xsl:template>
> 
>     <xsl:template match="supp">
>         <xsl:copy-of select="."/>
>     </xsl:template>
> 
> </xsl:stylesheet>
> 
> This will sort the supp elements according to the position in
> my:priorities.
> Not found supp-desc strings will have priority 0 so they will be first
> in output.
> 
> Of course you can also put the priorities in a separate file and
select
> it like
> 
>     <xsl:variable name="priorities"
> select="document('priorities.xml')/my:priorities/my:p"/>
> 
> Cheers,
> Anton
> 
> Kevin Bird wrote:
> 
> >Hi David
> >
> >Thanks for the answer(s). It is not a straighforward sort. Looking at
in
> >terms of priority:
> >
> >Bed &amp; Breakfast		--> priority 1
> >Bed &amp; Breakfast (child)	--> priority 2
> >Half Board				--> priority 3
> >Half Board (child)		--> priority 4
> >Full Board				--> priority 5
> >Full Board (child)		--> priority 6
> >
> >All other <supp> nodes are output before the priority ones above (in
> >document order).
> >
> >Kind regards.
> >
> >--
> >Kevin

Current Thread