You know it figures, I realized that right after I sent the email.
Thanks a lot for your straightforward, user friendly advice.
-----Original Message-----
From: G. Ken Holman [mailto:gkholman(_at_)CraneSoftwrights(_dot_)com]
Sent: Tuesday, April 27, 2004 10:03 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: RE: [xsl] Multiple groupings
At 2004-04-27 09:46 -0400, Kenny Akridge wrote:
I am outputting this data to html. When I use this XSL:
...
I am getting all of the PaymentType and CityName at the very top of the
report. Then I get all of the records sequentially below that.
On the surface it sounds perhaps like a table problem ... when HTML renders
tables, if you have information not properly wrapped in the table I think
it gets shown in advance of the table.
How can I
break the record listing and subtitle each section? It worked fine in the
text version.
By fixing your HTML ... if it works as you wish for the text version, then
you don't have a problem traversing the XML as you desire, you have a
problem wrapping the information in your target vocabulary (in this case,
HTML).
For totaling, should I just use keys?
No, because you'll have the same problem because using keys only works with
document-wide scope ... that's the awkwardness when it comes to doing
subgrouping as subsgrouping cannot easily work with document-wide
scope. Just use the variables as they are created.
An example below includes amounts and totals.
I hope this helps.
..................... Ken
T:\ftemp>type akridge.xml
<?xml version="1.0" encoding="UTF-8"?>
<ArrayOfAccountLineItems>
<AccountLineItem>
<ID>12993</ID>
<PaymentType>Credit Card</PaymentType>
<SettleDate>2004-04-14T22:57:46.6230000-04:00</SettleDate>
<CityName>Las Vegas</CityName>
<Amount>123</Amount>
</AccountLineItem>
<AccountLineItem>
<ID>12992</ID>
<PaymentType>Cash</PaymentType>
<SettleDate>2004-04-14T22:57:46.6230000-04:00</SettleDate>
<CityName>New York</CityName>
<Amount>123</Amount>
</AccountLineItem>
<AccountLineItem>
<ID>12963</ID>
<PaymentType>Check</PaymentType>
<SettleDate>2004-04-14T22:57:51.3100000-04:00</SettleDate>
<CityName>Orlando</CityName>
<Amount>123</Amount>
</AccountLineItem>
<AccountLineItem>
<ID>12962</ID>
<PaymentType>Check</PaymentType>
<SettleDate>2004-04-14T22:57:51.3100000-04:00</SettleDate>
<CityName>New York</CityName>
<Amount>123</Amount>
</AccountLineItem>
<AccountLineItem>
<ID>12969</ID>
<PaymentType>Credit Card</PaymentType>
<SettleDate>2004-04-14T22:57:51.4830000-04:00</SettleDate>
<CityName>Las Vegas</CityName>
<Amount>123</Amount>
</AccountLineItem>
<AccountLineItem>
<ID>12968</ID>
<PaymentType>Voucher</PaymentType>
<SettleDate>2004-04-14T22:57:51.4830000-04:00</SettleDate>
<CityName>Orlando</CityName>
<Amount>123</Amount>
</AccountLineItem>
<AccountLineItem>
<ID>12975</ID>
<PaymentType>Check</PaymentType>
<SettleDate>2004-04-14T22:57:51.6400000-04:00</SettleDate>
<CityName>Las Vegas</CityName>
<Amount>123</Amount>
</AccountLineItem>
<AccountLineItem>
<ID>12974</ID>
<PaymentType>Check</PaymentType>
<SettleDate>2004-04-14T22:57:51.6400000-04:00</SettleDate>
<CityName>Orlando</CityName>
<Amount>123</Amount>
</AccountLineItem>
<AccountLineItem>
<ID>12981</ID>
<PaymentType>Voucher</PaymentType>
<SettleDate>2004-04-14T22:57:51.8100000-04:00</SettleDate>
<CityName>New York</CityName>
<Amount>123</Amount>
</AccountLineItem>
<AccountLineItem>
<ID>12980</ID>
<PaymentType>Cash</PaymentType>
<SettleDate>2004-04-14T22:57:51.8100000-04:00</SettleDate>
<CityName>Orlando</CityName>
<Amount>123</Amount>
</AccountLineItem>
</ArrayOfAccountLineItems>
T:\ftemp>type akridge.xsl
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:variable name="items"
select="/ArrayOfAccountLineItems/AccountLineItem"/>
<xsl:for-each select="$items">
<xsl:if test="generate-id(.)=
generate-id($items[PaymentType=current()/PaymentType])">
<xsl:variable name="payments"
select="$items[PaymentType=current()/PaymentType]"/>
<xsl:text/>Payments for '<xsl:value-of select="PaymentType"/>':
<xsl:text/>
<xsl:for-each select="$payments">
<xsl:if test="generate-id(.)=
generate-id($payments[CityName=current()/CityName])">
<xsl:text/> In city '<xsl:value-of select="CityName"/>':
<xsl:text/>
<xsl:for-each select="$payments[CityName=current()/CityName]">
<xsl:value-of select="concat(' ID:',ID,'
Date:',SettleDate)"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
<xsl:text/> Total for <xsl:value-of select="CityName"/>
<xsl:text>: </xsl:text>
<xsl:value-of
select="sum($payments[CityName=current()/CityName]/Amount)"/>
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:text/> Total for <xsl:value-of select="PaymentType"/>
<xsl:text>: </xsl:text>
<xsl:value-of
select="sum($payments[PaymentType=current()/PaymentType]/Amount)"/>
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
T:\ftemp>saxon akridge.xml akridge.xsl
Payments for 'Credit Card':
In city 'Las Vegas':
ID:12993 Date:2004-04-14T22:57:46.6230000-04:00
ID:12969 Date:2004-04-14T22:57:51.4830000-04:00
Total for Las Vegas: 246
Total for Credit Card: 246
Payments for 'Cash':
In city 'New York':
ID:12992 Date:2004-04-14T22:57:46.6230000-04:00
Total for New York: 123
In city 'Orlando':
ID:12980 Date:2004-04-14T22:57:51.8100000-04:00
Total for Orlando: 123
Total for Cash: 246
Payments for 'Check':
In city 'Orlando':
ID:12963 Date:2004-04-14T22:57:51.3100000-04:00
ID:12974 Date:2004-04-14T22:57:51.6400000-04:00
Total for Orlando: 246
In city 'New York':
ID:12962 Date:2004-04-14T22:57:51.3100000-04:00
Total for New York: 123
In city 'Las Vegas':
ID:12975 Date:2004-04-14T22:57:51.6400000-04:00
Total for Las Vegas: 123
Total for Check: 492
Payments for 'Voucher':
In city 'Orlando':
ID:12968 Date:2004-04-14T22:57:51.4830000-04:00
Total for Orlando: 123
In city 'New York':
ID:12981 Date:2004-04-14T22:57:51.8100000-04:00
Total for New York: 123
Total for Voucher: 246
T:\ftemp>rem Done!
--
Public courses: Spring 2004 world tour of hands-on XSL instruction
Each week: Monday-Wednesday: XSLT/XPath; Thursday-Friday: XSL-FO
Hong Kong May 17-21; Bremen Germany May 24-28; Helsinki June 14-18
World-wide on-site corporate, govt. & user group XML/XSL training.
G. Ken Holman mailto:gkholman(_at_)CraneSoftwrights(_dot_)com
Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/
Box 266, Kars, Ontario CANADA K0A-2E0 +1(613)489-0999 (F:-0995)
Male Breast Cancer Awareness http://www.CraneSoftwrights.com/s/bc
Legal business disclaimers: http://www.CraneSoftwrights.com/legal
--+------------------------------------------------------------------
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(_at_)lists(_dot_)mulberrytech(_dot_)com>
--+--