RE: [xsl] Dynamically controlling sort order based on values in t he XML

Subject: RE: [xsl] Dynamically controlling sort order based on values in t he XML
From: Maria Amuchastegui <mamuchastegui@xxxxxxxxxxx>
Date: Fri, 3 Jun 2005 11:13:37 -0400
You can also do it in a single pass by passing the sort column to the
stylesheet as a parameter:

http://www.xslt.com/html/xsl-list/2005-03/msg01309.html

Maria
 

-----Original Message-----
From: Aron Bock [mailto:aronbock@xxxxxxxxxxx] 
Sent: Friday, June 03, 2005 10:10 AM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: RE: [xsl] Dynamically controlling sort order based on values in the
XML


>I need to be able to sort the data based on the CONFIG element of the 
>XML and I don't know ahead of time how many columns there are going to 
>be in the dataset and how many of them I will need to sort by.

I'd approach this as a multi-pass (in this case 2-pass) transform, as
follows:

pass 1: write a stylesheet that, given your input xml, generates as its
output another stylesheet that does what you want (sorts by multiple cols,
displays multiple cols, etc).

pass 2: run this generated stylesheet against the original input

Regards,

--A

>From: "Steve W" <lsl@xxxxxxxxxxxxx>
>Reply-To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
>To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
>Subject: [xsl] Dynamically controlling sort order based on values in 
>the XML
>Date: Fri, 3 Jun 2005 10:27:37 +0100
>
>I have some xml that looks like :
>
><DISPLAY>
>     <CONFIG>
>         <COL>
>             <ID>ColA</ID>
>             <ORDERBY DIRECTION="ASC">1</ORDERBY>
>         </COL>
>         <COL>
>             <ID>ColB</ID>
>             <ORDERBY DIRECTION="DSC">2</ORDERBY>
>         </COL>
>     </CONFIG>
>     <DATA>
>         <ROW>
>             <COL ID="ColA">
>                 <VALUE>BBB</VALUE>
>             </COL>
>             <COL ID="ColB">
>                 <VALUE>111</VALUE>
>             </COL>
>         </ROW>
>         <ROW>
>             <COL ID="ColA">
>                 <VALUE>CCC</VALUE>
>             </COL>
>             <COL ID="ColB">
>                 <VALUE>333</VALUE>
>             </COL>
>         </ROW>
>         <ROW>
>             <COL ID="ColA">
>                 <VALUE>AAA</VALUE>
>             </COL>
>             <COL ID="ColB">
>                 <VALUE>222</VALUE>
>             </COL>
>         </ROW>
>     </DATA>
></DISPLAY>
>
>I have a stylesheet that outputs the data sorted by the element in 
>CONFIG where COL/ORDERBY/text() is 1,  which looks like :
>
><xsl:template match="DISPLAY">
>    <xsl:variable name="sort_col"
>select="CONFIG/COL[ORDERBY/text()='1']/ID/text()" />
>    <xsl:apply-templates select="DATA/ROW" mode="do_data">
>       <xsl:sort select="COL[@ID=$sort_col]/VALUE/text()" />
>    </xsl:apply-templates>
></xsl:template>
>
><xsl:template match="ROW" mode="do_data">
>    <xsl:value-of select="COL[@ID='ColA']/VALUE/text()" />, 
><xsl:value-of select="COL[@ID='ColB']/VALUE/text()" />
>    <br />
></xsl:template>
>
>This gives me :
>AAA, 222
>BBB, 111
>CCC, 333
>
>I need to be able to sort the data based on the CONFIG element of the 
>XML and I don't know ahead of time how many columns there are going to 
>be in the dataset and how many of them I will need to sort by.
>
>Can anyone suggest a way to achive this ?

_________________________________________________________________
FREE pop-up blocking with the new MSN Toolbar - get it now! 
http://toolbar.msn.click-url.com/go/onm00200415ave/direct/01/

Current Thread