|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Resolving Variable Redefining Issues in a For Each
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@xxxxxxxxxxx> 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
>
>
__________________________________
Do you Yahoo!?
Yahoo! Small Business - Try our new resources site!
http://smallbusiness.yahoo.com/resources/
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








