Subject: Re: [xsl] Grouping and Key Problem From: Mukul Gandhi <mukulgandhi2003@xxxxxxxxxxx> Date: Fri, 9 Apr 2004 16:44:18 +0100 (BST) |
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@xxxxxxxxx> 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> > <td colspan="1"> > <b>Customer Name</b> > </td> > <td colspan="1"> > <b>Service Name</b> > </td> > <td colspan="2"> > <b>Times Per Day</b> > </td> > </tr> > <xsl:apply-templates select="Table[generate-id() > = > generate-id(key('kDate', date))]" mode="row1"/> > > </table > > </xsl:template> > > > <xsl:template match="Table" mode="row1"> > <tr> > <td colspan="4"> > <div style="background-color:red"><xsl:value-of > select="date"/></div> > <xsl:apply-templates > select="parent::NewDataSet/Table[date = > current()/date][CustomerName = key('kCustomer', > CustomerName)/CustomerName]" mode="row2"/> > </td> > </tr> > > </xsl:template> > > <xsl:template match="Table" mode="row2"> > <tr> > <td colspan="4"> > <hr/> > <xsl:value-of select="CustomerName"/> > <xsl:apply-templates > select="parent::NewDataSet/Table[date = > current()/date][CustomerName = > current()/CustomerName][ServiceName]" mode="row3"/> > </td> > </tr> > </xsl:template> > > <xsl:template match="Table" mode="row3"> > <tr> > <td /> > <td colspan="1"> > <xsl:value-of select="ServiceName"/> > </td> > <td colspan="2"> > <xsl:value-of select="TimesPerDay"/> > </td> > </tr> > </xsl:template> > > </xsl:stylesheet> > > > ===== > Home: (513) 661 - 8007 > Cell: (513) 884 - 4868 > Email: jamesanthonyhunt@xxxxxxxxx > > __________________________________ > Do you Yahoo!? > Yahoo! Small Business $15K Web Design Giveaway > http://promotions.yahoo.com/design_giveaway/ > ________________________________________________________________________ Yahoo! India Matrimony: Find your partner online. http://yahoo.shaadi.com/india-matrimony/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Grouping and Key Problem, Mukul Gandhi | Thread | Re: [xsl] Grouping and Key Problem, James Hunt |
Re: [xsl] Grouping and Key Problem, Mukul Gandhi | Date | RE: [xsl] Getting the first and las, Hansen, John |
Month |