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

Subject: Re: [xsl] re-ordering nodes/partial sort
From: Anton Triest <anton@xxxxxxxx>
Date: Sun, 10 Oct 2004 22:05:29 +0200
<?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