ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> xsl-list
xsl-list
Re: [xsl] grouping, sorting, splitting
by Mukul Gandhi other posts by this author
Apr 18 2005 4:39AM messages near this date
RE: RE: RE: RE: RE: [xsl] GMT to BST converter | Re: [xsl] grouping, sorting, splitting
& XSLT Hi Stephen,
  Please try this XSL..

<?xml version="1.0"?>  
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"> 

<xsl:output method="html" indent="yes" /> 
  
<xsl:key name="by-date" match="entry" use="@date" /> 
  
<xsl:template match="/page"> 
    <html> 
      <head> 
        <title/> 
      </head> 
      <body> 
        <table> 
          <xsl:for-each select="entry[generate-id() =
generate-id(key('by-date', @date)[1])]"> 
            <xsl:for-each select="key('by-date',
@date)"> 
              <xsl:sort select="title" /> 
              <xsl:if test="(position() = 1) or
((position() - 1) mod 3 = 0)"> 
                <xsl:variable name="pos"
select="position()" /> 
                <tr> 
                  <xsl:call-template
name="generateTRs"> 
                    <xsl:with-param name="node-set"
select="key('by-date', @date)[position() &gt;=
$pos][position() &lt;= ($pos + 3)]" /> 
                  </xsl:call-template> 
                </tr> 
              </xsl:if> 
            </xsl:for-each> 
            <!-- a dummy row --> 
            <tr> 
              <td> -</td><td>-</td><td>-</td>
            </tr> 
          </xsl:for-each> 
        </table> 
      </body> 
    </html>   
</xsl:template> 
  
<xsl:template name="generateTRs"> 
    <xsl:param name="node-set" /> 
    
    <tr> 
      <xsl:for-each select="$node-set"> 
        <td> 
          <xsl:value-of select="@date" /> 
        </td> 
      </xsl:for-each>  
      <xsl:call-template name="generateRemainingTDs"> 
         <xsl:with-param name="n" select="3 -
count($node-set)" /> 
      </xsl:call-template> 
    </tr>   
</xsl:template> 
  
<xsl:template name="generateRemainingTDs"> 
    <xsl:param name="n" /> 
        
    <xsl:if test="$n &gt; 0"> 
      <td/> 
      <xsl:call-template name="generateRemainingTDs"> 
        <xsl:with-param name="n" select="$n - 1" /> 
      </xsl:call-template> 
    </xsl:if> 
</xsl:template> 
  
</xsl:stylesheet> 

Regards,
Mukul

--- beowulf <carisenda@[...].com>  wrote:
>  Hi,
>  
>  I have XML if the form:
>  
>  <page>
>  <entry date="2005-04-15">
>   <title>foo</title>
>  </entry>
>  <entry date="2005-04-15">
>   <title>bar</title>
>  </entry>
>  <entry date="2005-02-05">
>   <title>baz</title>
>  </entry>
>  ...
>  </page>
>  
>  Which I am trying to group by date, sort by tiltle
>  and then split into
>  sets of 3, 3 being the number of columns in the HTML
>  TABLE element I
>  am trying to produce as an end result.
>  
>  I've got the grouping and sorting:
>  <xsl:for-each select="entry[key('days', @date) and
>  count(.|key('days',
>  @date)[1])= 1]">
>  <xsl:sort select="title"/>
>  
>  and I've even got the first item in each group of
>  three from that
>  grouped and sorted set:
>  <xsl:for-each select="key('days', @date)[position()
>  mod 3 = 1]">
>  
>  But I just can't seem to make the final leap to
>  displaying the
>  following siblings of the above, making the 3 cell
>  rows. Should I be
>  doing this some other way or can someone help me
>  where I am?
>  
>  Many thanks,
>  Stephen
>  
> 
--~------------------------------------------------------------------
>  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@[...].com>
>  --~--
>  
>  


		
__________________________________ 
Do you Yahoo!? 
Plan great trips with Yahoo! Travel: Now over 17,000 guides!
http://travel.yahoo.com/p-travelguide

--~------------------------------------------------------------------
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@[...].com> 
--~--
Thread:
Mukul Gandhi
Mukul Gandhi
Mukul Gandhi

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved