Re: [xsl] Output sorted XHTML table for a subset of elements

Subject: Re: [xsl] Output sorted XHTML table for a subset of elements
From: "Erik Vullings" <erik.vullings@xxxxxxxxx>
Date: Sun, 25 May 2008 09:44:41 +0200
Hi,

I'm not familiar with your XSLT library, but the following XSLT worked for me:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
   <xsl:output method="html" encoding="Windows-1252" />

   <xsl:template match="/users">
      <html>
         <body>
            <table>
               <tr>
                  <xsl:for-each select="user">
                     <xsl:sort select="lines" data-type="number"
order="descending"/>
                     <xsl:if test = "lines > 25">
                     	<td><xsl:value-of select="@name"
/>(<xsl:value-of select="lines" />)</td>
                     </xsl:if>
                  </xsl:for-each>
               </tr>
            </table>
         </body>
      </html>
   </xsl:template>
</xsl:stylesheet>

Cheers
Erik


On Sat, May 24, 2008 at 4:45 PM, Steven Davies <xsl-list@xxxxxxxxxxx> wrote:
> Hi,
>
> I've been having a problem with a stylesheet I'm creating and need some
> help with a part of it - given the following XML snippet:
>
> <users>
>  <user name="alf">
>    <lines>7</lines>
>  </user>
>  <user name="bert">
>    <lines>78</lines>
>  </user>
>  <user name="charlie">
>    <lines>731</lines>
>  </user>
>  <user name="derek">
>    <lines>62</lines>
>  </user>
> </users>
>
> ..what I'm trying to achieve is an XHTML table with 5 columns and
> however many rows are necessary (imagine there may be a hundred or so
> users) where the items in the table consist of only the users where the
> user's line count is above 25 and is sorted by their line count.
>
> So for the above snippet the output should be:
>
> <table>
>  <tr>
>    <td>charlie (731)</td>
>    <td>bert (78)</td>
>    <td>derek (62)</td>
>  </tr>
> </table>
>
> ..obviously with more columns per row and more rows depending on the
> size of the input document.
>
> I've tried to do this using a template matching the next-siblings of the
> users to achieve the grouping, but then I can't sort the items or select
> the ones I want because the XPath works on the input node set and not a
> node set I've selected myself (using for-each or a template).
>
> If it makes any difference I'm using libXSLT 1.1.22 to do the
> transformation.
>
> Can anyone give me any pointers with this?
>
> Thanks,
> Steve

Current Thread