Hi Sian,
Following is a XSLT 2.0 solution ..
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output method="text" />
<xsl:template match="/Root/Wrapper/Detail">
<xsl:for-each-group select="Unit"
group-by="@RecordID">
Record Type <xsl:value-of select="@RecordID" />
<xsl:text>
</xsl:text>
<xsl:for-each-group select="current-group()"
group-by="@Code">
Code - <xsl:value-of select="@Code" /> Total -
<xsl:value-of select="sum(current-group()/@Total)" />
<xsl:text>
</xsl:text>
</xsl:for-each-group>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>
Regards,
Mukul
--- Sian Mace <sianmace(_at_)hotmail(_dot_)com> wrote:
Hi,
Below are my XML and XSL
<Root>
<Wrapper>
<Detail>
<Unit RecordID="1" Code="1" Total="2" />
<Unit RecordID="1" Code="1" Total="2" />
<Unit RecordID="1" Code="2" Total="2" />
<Unit RecordID="1" Code="2" Total="2" />
<Unit RecordID="1" Code="3" Total="2" />
<Unit RecordID="2" Code="3" Total="2" />
<Unit RecordID="2" Code="3" Total="2" />
<Unit RecordID="2" Code="4" Total="2" />
<Unit RecordID="2" Code="4" Total="2" />
</Detail>
</Wrapper>
</Root>
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:script="urn:my-namespace">
<xsl:template match="/">
<xsl:element name="Root">
<xsl:variable name="URecordID"
select="/Root/Wrapper/Detail/Unit[not(./@RecordID=preceding::Unit/@RecordID)]"/>
<xsl:for-each select="$URecordID">
<xsl:variable name="thisRID" select="."/>
<xsl:variable name="RecordIDCodes"
select="/Root/Wrapper/Detail/Unit[./@RecordID=$thisRID/@RecordID]"/>
<xsl:element name="Record">
<xsl:attribute name="Type">
<xsl:value-of
select="$thisRID/@RecordID"/>
</xsl:attribute>
<xsl:variable name="URecordIDCodes"
select="$RecordIDCodes[not(./@Code=preceding::Unit/@Code)]"/>
<xsl:for-each select="$URecordIDCodes">
<xsl:variable name="thisCodes"
select="."/>
<xsl:variable name="UCode"
select="$RecordIDCodes[./@Code=$thisCodes/@Code]"/>
<xsl:element name="RCVCTN">
<xsl:attribute
name="Code">
<xsl:value-of
select="$thisCodes/@Code"/>
</xsl:attribute>
<xsl:attribute
name="Total">
<xsl:value-of
select="sum($UCode/@Total)"/>
</xsl:attribute>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
This Should output the data first grouped by Record
ID, Then By Unique Codes
for that Record ID, totalling the Total column.
The problem is re assigning the variable in the for
loop. I know this is
the problem and why, but want some help finding a
work around.
If you run the xml and xsl as a test, you should see
that the output should
be:
Record Type 1
Code - 1 Total - 4
Code - 2 Total - 4
Code - 3 Total - 2
Record Type 2
Code - 3 Total - 4
Code - 4 Total - 4
What i actually get is
Record Type 1
Code - 1 Total - 4
Code - 2 Total - 4
Code - 3 Total - 2
Record Type 2
Code - 4 Total - 4
As you can see, Code 3 is missing from record type
2. This is because it
has already occured for Record type 1 and cannot be
reassigned in the
variable.
I need to resolve this, and would appriciate some
help
Thanks
Sian
--~------------------------------------------------------------------
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>
--~--
__________________________________
Do you Yahoo!?
Yahoo! Small Business - Try our new resources site!
http://smallbusiness.yahoo.com/resources/
--~------------------------------------------------------------------
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>
--~--