[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: sorting a table based on first column which contai
But the default sort will put 10 before 2. If you don't want that you could do <xsl:sort select="td" data-type="number"/> <xsl:sort select="td" data-type="text"/> i.e. two apparently separate sort keys - if they aren't distinguishable as numbers (both convert to NaN) then they will be sorted as strings. Regards, Michael Kay http://www.saxonica.com/ http://twitter.com/michaelhkay > -----Original Message----- > From: Robby Pelssers [mailto:robby.pelssers@xxxxxxxxx] > Sent: 17 December 2009 15:53 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: RE: sorting a table based on first column > which contains both numbers and words > > Mm... damn.... I thought I needed to specify the data-type ;-( > > So I just came up with following solution: > > <xsl:template match="table"> > <table> > <xsl:variable name="numericRows" > select="tr[string(number(td)) !='NaN']"/> > <xsl:variable name="alphabeticRows" > select="tr[string(number(td))='NaN']"/> > <xsl:apply-templates select="$numericRows"> > <xsl:sort select="td" data-type="number"/> > </xsl:apply-templates> > <xsl:apply-templates select="$alphabeticRows"> > <xsl:sort select="td" data-type="text"/> > </xsl:apply-templates> > </table> > </xsl:template> > > But I also tested without specifying any data-type and you're > right ...aaargh.. > > <xsl:template match="table"> > <table> > <xsl:apply-templates select="tr"> > <xsl:sort select="td"/> > </xsl:apply-templates> > </table> > </xsl:template> > > Thx, > You made life a lot easier ;-) > > Robby > > -----Original Message----- > From: Andrew Welch [mailto:andrew.j.welch@xxxxxxxxx] > Sent: Thursday, December 17, 2009 4:28 PM > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: Re: sorting a table based on first column > which contains both numbers and words > > 2009/12/17 Robby Pelssers <robby.pelssers@xxxxxxxxx>: > > Hi all, > > > > I have the use case where I need to sort a table based on > it's first column. This column can contain only numbers but > also a mix of words and numbers. See example below. > > > > <table> > > <tr> > > <td>5</td> > > </tr> > > <tr> > > <td>3</td> > > </tr> > > <tr> > > <td>Banana</td> > > </tr> > > <tr> > > <td>Apple</td> > > </tr> > > </table> > > > > > > I want following output (first sorted numerical and then > > alphabetically) > > > > <table> > > <tr> > > <td>3</td> > > </tr> > > <tr> > > <td>5</td> > > </tr> > > <tr> > > <td>Apple</td> > > </tr> > > <tr> > > <td>Banana</td> > > </tr> > > </table> > > > > How can I accomplish this with xslt? > > > The default sort will do that, read about xsl:sort > > > -- > Andrew Welch > http://andrewjwelch.com > Kernow: http://kernowforsaxon.sf.net/
|
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
|