xsl-list
[Top] [All Lists]

Re: Grouping and Key Problem

2004-04-10 03:12:57
Hi James,
  This should be ok. I ommited a xsl:for-each loop in
my previous answer.

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

<xsl:key name="kDate" match="Table" use="date"/>
<xsl:key name="kCustomer" match="Table"
use="concat(date,'+',CustomerName)"/>
<xsl:template match="/NewDataSet">
<html>
  <table border="">
    <xsl:for-each select="Table">
        <xsl:if test="generate-id(.) =
generate-id(key('kDate', date)[1])">
          <tr>
            <td colspan="4">
              <xsl:value-of select="date"/>
            </td>
          </tr>
        <xsl:for-each select="key('kDate', date)">
          <xsl:if test="generate-id(.) =
generate-id(key('kCustomer',concat(date,'+',CustomerName))[1])">
           <xsl:for-each select="key('kCustomer',
concat(date,'+',CustomerName))">
             <xsl:if test="position() = 1">
                <tr>
                  <td/>
                  <td>
                   <xsl:value-of select="CustomerName"/>
                  </td>
                  <td>
                    <xsl:value-of select="ServiceName"/>
                  </td>
                  <td>
                    <xsl:value-of select="TimesPerDay"/>
                  </td>
           </tr>
    </xsl:if>
    <xsl:if test="not(position() = 1)">
      <tr>
         <td colspan="2"/>
           <td>
             <xsl:value-of select="ServiceName"/>
           </td>
           <td>
             <xsl:value-of select="TimesPerDay"/>
           </td>
     </tr>
   </xsl:if>
</xsl:for-each>
</xsl:if>
</xsl:for-each>                                 </xsl:if>
</xsl:for-each>
</table>
</html>

</xsl:template>
</xsl:stylesheet>

Regards,
Mukul

 --- James Hunt <jamesanthonyhunt(_at_)yahoo(_dot_)com> wrote: >
Hi Mukul,

Thanks for all your help, but I'm only getting the
first customer from each date. 

Current Output:

12/13/2001 
 John  Water Plant 4 
       Mail        5 
12/14/2001 
 Jimmy Mail        5 

What I need:
12/13/2001 
 John Water Plant 4 
 Mail             5 
 Jimmy      Mail  5 
12/14/2001 
 Jimmy      Mail  5 

Can you tell me what I need to do?

Thanks,
James

--- Mukul Gandhi <mukulgandhi2003(_at_)yahoo(_dot_)co(_dot_)in>
wrote:
Hi James,
  I have written the logic specific to your
requirement. Hope its useful.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:output method="html" version="1.0"
encoding="UTF-8" indent="yes"/>
<xsl:key name="kDate" match="Table" use="date"/>
<xsl:key name="kCustomer" match="Table"
use="concat(date,'+',CustomerName)"/>

<xsl:template match="/NewDataSet">
  <html>
    <table border="1">
      <xsl:for-each select="Table">
    <xsl:if test="generate-id(.) =
generate-id(key('kDate', date)[1])">
    <tr>
      <td colspan="4">
        <xsl:value-of select="date"/>
      </td>
    </tr>
    <xsl:for-each select="key('kDate', date)">
       <xsl:if test="generate-id(.) =


generate-id(key('kCustomer',concat(date,'+',CustomerName))[1])">
         <xsl:if test="position() = 1">
            <tr>
              <td/>
              <td>
               <xsl:value-of select="CustomerName"/>
              </td>
              <td>
                <xsl:value-of select="ServiceName"/>
              </td>
              <td>
                <xsl:value-of select="TimesPerDay"/>
              </td>
          </tr>
     </xsl:if>
                                                             <xsl:if 
test="not(position() = 1)">
       <tr>
         <td colspan="2"/>
            <td>
              <xsl:value-of select="ServiceName"/>
            </td>
            <td>
              <xsl:value-of select="TimesPerDay"/>
            </td>
       </tr>
     </xsl:if>
   </xsl:if>
</xsl:for-each>
</xsl:if>
</xsl:for-each>

</table>
</html>
</xsl:template>

</xsl:stylesheet>

Regards,
Mukul

 --- James Hunt <jamesanthonyhunt(_at_)yahoo(_dot_)com>
wrote:

I'm having problems with grouping and the use of
keys
can anyone tell me what I'm doing wrong here. I
have
two records of John on the 12/13/2001 They
shouldn't
display separated. How can I make this tranform
into
something like this:

12/13/2001
John
  Water Plant
  Mail
12/13/2001
Jimmy
  Mail

Right now it is giving this:

12/13/2001
John
  Water Plant
  Mail
John
  Water Plant
  Mail
12/13/2001
Jimmy
  Mail

XML File

<?xml version="1.0" encoding="UTF-8"?>
<NewDataSet>
  <Table>
          <mymonth>12</mymonth>
          <myday>13</myday>
          <myyear>2001</myyear>
          <CustomerName>John</CustomerName>
          <date>12/13/2001</date>
          <TimesPerDay>4</TimesPerDay>
          <ServiceName>Water Plant</ServiceName>
  </Table>
  <Table>
          <mymonth>12</mymonth>
          <myday>13</myday>
          <myyear>2001</myyear>
          <CustomerName>John</CustomerName>
          <date>12/13/2001</date>
          <TimesPerDay>5</TimesPerDay>
          <ServiceName>Mail</ServiceName>
  </Table>
  <Table>
          <mymonth>12</mymonth>
          <myday>13</myday>
          <myyear>2001</myyear>
          <CustomerName>Jimmy</CustomerName>
          <date>12/13/2001</date>
          <TimesPerDay>5</TimesPerDay>
          <ServiceName>Mail</ServiceName>
  </Table>
  <Table>
          <mymonth>12</mymonth>
          <myday>14</myday>
          <myyear>2001</myyear>
          <CustomerName>Jimmy</CustomerName>
          <date>12/14/2001</date>
          <TimesPerDay>5</TimesPerDay>
          <ServiceName>Mail</ServiceName>
  </Table>
</NewDataSet>




XSLT



<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
  <xsl:output method="html" version="1.0"
indent="yes"/>
  <xsl:key name="kCustomer" match="Table"
use="CustomerName"/>
  <xsl:key name="kDate" match="Table"
use="date"/>

  <xsl:template match="NewDataSet">
          <head>
                  <title>Employee's Week Schedule</title>
                  <link href="../css/reports.css"
type="text/css"
rel="stylesheet" />
          </head> 

          <table border="0" cellpadding="4"
style="border-collapse:collapse;" width="100%">
                  <tr>

=== message truncated === 

________________________________________________________________________
Yahoo! India Matrimony: Find your partner online. 
http://yahoo.shaadi.com/india-matrimony/


<Prev in Thread] Current Thread [Next in Thread>