[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: Dynamically controlling sort order based on values
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: 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: 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/
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|