[xsl] sorting and grouping

Subject: [xsl] sorting and grouping
From: gopinath_emmidisetty@xxxxxxxxxxxxxxx
Date: Tue, 19 Oct 2004 16:16:17 +0100
Hi,
 
I have an xml document with x number of documents and I want to display 
them in columns in different pages say 1-10, 11-20, etc.  Also, I want to 
sort by clicking the columns.  I have managed to display the records in 
different pages and partly acheived the sorting.  But the sorting is 
applied to that selected group of records for e.g., if 11-20 records are 
selected then sorting is applied to 11-20 records.  I want to apply the 
sorting to all records and then display only that group of records.  I 
have tried to change the xsl file but not getting the result, I want.  
Also, I don't know whether it is possible to debug the xsl document.  Can 
somebody look at my xml document and the xsl file and tell me what am I 
doing wrong or any other possible ways of acheiving the results.
 
Please let me know, if I miss any information to help me.
 
Many thanks.
 
My XML file

<viewentries>
  <viewentry position="1">
    <entrydata columnnumber="0" name="AA_EMPSTAFFNUMBER">
      <text>1001</text></entrydata>
    <entrydata columnnumber="1" name="aa_EmpFirstName">
      <text>Shel</text></entrydata>
    <entrydata columnnumber="2" name="aa_EmpLastName">
      <text>Easey</text></entrydata>
    <entrydata columnnumber="3" name="aa_Status">
      <text>Awaiting first level review</text></entrydata>
  </viewentry>
  <viewentry position="2">
    <entrydata columnnumber="0" name="AA_EMPSTAFFNUMBER">
      <text>1002</text></entrydata>
    <entrydata columnnumber="1" name="aa_EmpFirstName">
      <text>Dave</text></entrydata>
    <entrydata columnnumber="2" name="aa_EmpLastName">
      <text>Johnny</text></entrydata>
    <entrydata columnnumber="3" name="aa_Status">
      <text>Awaiting employee acceptance</text></entrydata>
  </viewentry>
  <viewentry position="3">
    <entrydata columnnumber="0" name="AA_EMPSTAFFNUMBER">
      <text>1003</text></entrydata>
    <entrydata columnnumber="1" name="aa_EmpFirstName">
      <text>Rob</text></entrydata>
    <entrydata columnnumber="3" name="aa_EmpLastName">
      <text>Tom</text></entrydata>
    <entrydata columnnumber="4" name="aa_Status">
      <text>Awaiting third level review</text></entrydata>
  </viewentry>
  <viewentry position="4">
    <entrydata columnnumber="0" name="AA_EMPSTAFFNUMBER">
      <text>1004</text></entrydata>
    <entrydata columnnumber="1" name="aa_EmpFirstName">
      <text>Phil</text></entrydata>
    <entrydata columnnumber="3" name="aa_EmpLastName">
      <text>Byle</text></entrydata>
    <entrydata columnnumber="4" name="aa_Status">
      <text>Awaiting second level review</text></entrydata>
  </viewentry>
</viewentries>
 
My XSL file is

<xsl:stylesheet version="1.0">
 <xsl:output method="xml" omit-xml-declaration="yes"/>
 <xsl:param name="startDoc" select="1"/>
 <xsl:param name="endDoc" select="4"/>
 <xsl:param name="sortCol" select="3"/>
        
 <xsl:template match="/">
  <div>
   <table class="catalog_row1"><tr>
    <td>Total documents:<xsl:value-of 
select="count(./viewentries/viewentry)" />
    </td>
   </tr></table>
   <br/>
<!--   <xsl:apply-templates select="viewentries" /> -->
   <xsl:apply-templates select="viewentries">
<!--       <xsl:sort 
select="viewentry/entrydata[@columnnumber=number($sortCol)]"/> -->
   </xsl:apply-templates>
  </div>
 </xsl:template>
 <xsl:template match="viewentries">
  <table class="catalog_table">
    <xsl:apply-templates select="viewentry[ (@position >= 
number($startDoc)) and (@position &lt;= number($endDoc) ) ]">
      <xsl:sort select="entrydata[@columnnumber=number($sortCol)]"/>
    </xsl:apply-templates>
  </table>
 </xsl:template>
        
 <xsl:template match="viewentry">
  <xsl:if test="position()=1">
  <tr class="catalog_genre_head">
   <td colspan="4">
    View of documents - Total documents: <xsl:value-of 
select="count(../viewentry)" />
   </td>
  </tr>
  <tr class="catalog_head">
   <td>EmpID</td>
   <td>First Name</td>
   <td>Last Name</td>
   <td>Status</td>
  </tr>
  </xsl:if>
<!--  <tr class="catalog_row0">  -->
  <tr class="catalog_row0">
<!--   <xsl:apply-templates select="entrydata" /> -->
   <xsl:apply-templates select="entrydata" />
  </tr>
 </xsl:template>

 <xsl:template match="entrydata[@columnnumber=0]">
 <td width="50">
  <a>
   <xsl:attribute name="href">
   /MyRef/Downloads/Domino/catview.nsf/0/<xsl:value-of select="text" 
/>?open
   </xsl:attribute><xsl:value-of select="text" /></a>
 </td>
 </xsl:template>
 <xsl:template match="entrydata[@columnnumber=1]">
 <td width="150">
  <xsl:value-of select="text" />
 </td>
 </xsl:template>
 <xsl:template match="entrydata[@columnnumber=2]">
 <td width="150">
  <xsl:value-of select="text" />
 </td>
 </xsl:template>
 <xsl:template match="entrydata[@columnnumber=3]">
 <td width="300">
  <xsl:value-of select="text" />
 </td>
 </xsl:template>
    </xsl:stylesheet>
 
I am linking both xml and xsl through another html document using 
Javascript.  The output will be something like this
 
Total documents:4 | Pages  1-2 3-4
View of documents - Total documents: 4
EmpID First Name Last Name Status 
1002 Dave John Awaiting employee acceptance 
1001 Shel Easey Awaiting first level review 
1004 Phil Byle Awaiting second level review 
1003 Rob Tom Awaiting third level review

Current Thread