Subject: Re: [xsl] Multiple groupings From: Mukul Gandhi <mukul_gandhi@xxxxxxxxx> Date: Tue, 27 Apr 2004 07:24:32 -0700 (PDT) |
Here is another solution - <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xalan="http://xml.apache.org/xalan" exclude-result-prefixes="xalan"> <xsl:output method="text" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:key name="by-payment-type" match="AccountLineItem" use="PaymentType"/> <xsl:key name="by-city" match="AccountLineItem" use="CityName"/> <xsl:template match="ArrayOfAccountLineItems"> <xsl:for-each select="AccountLineItem"> <xsl:if test="generate-id(.) = generate-id(key('by-payment-type', PaymentType)[1])"> PaymentType: <xsl:value-of select="PaymentType"/> <xsl:variable name="rtf"> <xsl:for-each select="key('by-payment-type', PaymentType)"> <AccountLineItem> <ID> <xsl:value-of select="ID"/> </ID> <SettleDate> <xsl:value-of select="SettleDate"/> </SettleDate> <CityName> <xsl:value-of select="CityName"/> </CityName> </AccountLineItem> </xsl:for-each> </xsl:variable> <xsl:for-each select="xalan:nodeset($rtf)/AccountLineItem"> <xsl:if test="generate-id(.) = generate-id(key('by-city', CityName)[1])"> City: <xsl:value-of select="CityName"/> <xsl:for-each select="key('by-city', CityName)"> ID: <xsl:value-of select="ID"/> SettleDate: <xsl:value-of select="SettleDate"/> </xsl:for-each> Total : <xsl:value-of select="count(key('by-city', CityName))"/> </xsl:if> </xsl:for-each> Total : <xsl:value-of select="count(key('by-payment-type', PaymentType))"/> </xsl:if> </xsl:for-each> </xsl:template> </xsl:stylesheet> Regards, Mukul --- Kenny Akridge <kenny@xxxxxxxxxxxxxxxxx> wrote: > I've looked at the FAQs, but have had a hard time > making any certain methods > work. I basically have XML that has a PaymentType, > City, Date and ID. I > need to group all records by PaymentType then by > City. I need to total by > city and by Payment type. Here is some sample XML. > > <?xml version="1.0" encoding="UTF-16"?> > <ArrayOfAccountLineItems> > <AccountLineItem> > <ID>12993</ID> > <PaymentType>Credit Card</PaymentType> > > <SettleDate>2004-04-14T22:57:46.6230000-04:00</SettleDate> > <CityName>Las Vegas</CityName> > </AccountLineItem> > <AccountLineItem> > <ID>12992</ID> > <PaymentType>Cash</PaymentType> > > <SettleDate>2004-04-14T22:57:46.6230000-04:00</SettleDate> > <CityName>New York</CityName> > </AccountLineItem> > <AccountLineItem> > <ID>12963</ID> > <PaymentType>Check</PaymentType> > > <SettleDate>2004-04-14T22:57:51.3100000-04:00</SettleDate> > <CityName>Orlando</CityName> > </AccountLineItem> > <AccountLineItem> > <ID>12962</ID> > <PaymentType>Check</PaymentType> > > <SettleDate>2004-04-14T22:57:51.3100000-04:00</SettleDate> > <CityName>New York</CityName> > </AccountLineItem> > <AccountLineItem> > <ID>12969</ID> > <PaymentType>Credit Card</PaymentType> > > <SettleDate>2004-04-14T22:57:51.4830000-04:00</SettleDate> > <CityName>Las Vegas</CityName> > </AccountLineItem> > <AccountLineItem> > <ID>12968</ID> > <PaymentType>Voucher</PaymentType> > > <SettleDate>2004-04-14T22:57:51.4830000-04:00</SettleDate> > <CityName>Orlando</CityName> > </AccountLineItem> > <AccountLineItem> > <ID>12975</ID> > <PaymentType>Check</PaymentType> > > <SettleDate>2004-04-14T22:57:51.6400000-04:00</SettleDate> > <CityName>Las Vegas</CityName> > </AccountLineItem> > <AccountLineItem> > <ID>12974</ID> > <PaymentType>Check</PaymentType> > > <SettleDate>2004-04-14T22:57:51.6400000-04:00</SettleDate> > <CityName>Orlando</CityName> > </AccountLineItem> > <AccountLineItem> > <ID>12981</ID> > <PaymentType>Voucher</PaymentType> > > <SettleDate>2004-04-14T22:57:51.8100000-04:00</SettleDate> > <CityName>New York</CityName> > </AccountLineItem> > <AccountLineItem> > <ID>12980</ID> > <PaymentType>Cash</PaymentType> > > <SettleDate>2004-04-14T22:57:51.8100000-04:00</SettleDate> > <CityName>Orlando</CityName> > </AccountLineItem> > </ArrayOfAccountLineItems> > > II have been trying the for-each PaymentType[not(. = > preceding::PaymentType)] approach. > > Any thoughts on the best way to tackle this? > > Thanks. > __________________________________ Do you Yahoo!? Win a $20,000 Career Makeover at Yahoo! HotJobs http://hotjobs.sweepstakes.yahoo.com/careermakeover
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Multiple groupings, Kenny Akridge | Thread | [xsl] Xpath of an attribute, Animesh Sharma |
RE: [xsl] Multiple groupings, Kenny Akridge | Date | RE: [xsl] ANN: XSLT 2.0 and XPath 2, Michael Kay |
Month |