xsl-list
[Top] [All Lists]

RE: re-ordering nodes/partial sort

2004-10-10 14:29:46
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(_at_)cking(_dot_)be]
Sent: 10 October 2004 21:05
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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[(_at_)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


--+------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--+--





<Prev in Thread] Current Thread [Next in Thread>