Subject: [xsl] Grouping over multiple files From: "Kevin Bird" <kevin.bird@xxxxxxxxxxxxxxxxxxxxxxx> Date: Sat, 14 Jan 2006 14:24:18 -0000 |
Hello I am grouping <person> elements from four files (North, South, East & West). The grouping is working fine, but I would like to add a source attribute to the revenue elements to show which file they came from (please see 'desired output' section below. I have attached cut down versions of the input, along with the current stylesheet and output. Thanks. -- Kevin ------------ North.xml ------------ <sales> <period id="October"> <person> <name>Peter</name> <revenue>1000</revenue> </person> <person> <name>Fred</name> <revenue>2000</revenue> </person> <person> <name>Alex</name> <revenue>100</revenue> </person> <person> <name>Barney</name> <revenue>20</revenue> </person> </period> </sales> ------------ South.xml ------------ <sales> <period id="October"> <person> <name>Peter</name> <revenue>500</revenue> </person> <person> <name>Barney</name> <revenue>750</revenue> </person> </period> </sales> ------------ East.xml ------------ <sales> <period id="October"> <person> <name>Peter</name> <revenue>40</revenue> </person> <person> <name>Fred</name> <revenue>5000</revenue> </person> <person> <name>Alex</name> <revenue>100</revenue> </person> </period> </sales> ------------ West.xml ------------ <sales> <period id="October"> <person> <name>Fred</name> <revenue>400</revenue> </person> <person> <name>Alex</name> <revenue>2000</revenue> </person> </period> </sales> ------------ Sales.xsl ------------ <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output indent="yes" method="xml"/> <xsl:variable name="northsales" select="document('north.xml')/sales/period/person"/> <xsl:variable name="southsales" select="document('south.xml')/sales/period/person"/> <xsl:variable name="eastsales" select="document('east.xml')/sales/period/person"/> <xsl:variable name="westsales" select="document('west.xml')/sales/period/person"/> <xsl:template match="/"> <combinedsales> <xsl:for-each-group select="$northsales, $southsales, $eastsales, $westsales" group-by="name"> <person> <xsl:copy-of select="(current-group()/name)[1]"/> <xsl:for-each select="current-group()/revenue"> <xsl:copy-of select="."/> </xsl:for-each> </person> </xsl:for-each-group> </combinedsales> </xsl:template> </xsl:stylesheet> ------------ Current Output ------------ <combinedsales> <person> <name>Peter</name> <revenue>1000</revenue> <revenue>500</revenue> <revenue>40</revenue> </person> <person> <name>Fred</name> <revenue>2000</revenue> <revenue>5000</revenue> <revenue>400</revenue> </person> <person> <name>Alex</name> <revenue>100</revenue> <revenue>100</revenue> <revenue>2000</revenue> </person> <person> <name>Barney</name> <revenue>20</revenue> <revenue>750</revenue> </person> </combinedsales> ------------ Desired Output ------------ <combinedsales> <person> <name>Peter</name> <revenue source="north.xml">1000</revenue> <!-- add @source to indicate file origin --> <revenue source="south.xml">500</revenue> <revenue source="east.xml">40</revenue> </person> <person> <name>Fred</name> <revenue source="north.xml">2000</revenue> <revenue source="east.xml">5000</revenue> <revenue source="west.xml">400</revenue> </person> <person> <name>Alex</name> <revenue source="north.xml">100</revenue> <revenue source="east.xml">100</revenue> <revenue source="west.xml">2000</revenue> </person> <person> <name>Barney</name> <revenue source="north.xml">20</revenue> <revenue source="south.xml">750</revenue> </person> </combinedsales>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: RE: RE: [xsl] Delta between 2 x, Rich_Wheadon | Thread | RE: [xsl] Grouping over multiple fi, Michael Kay |
RE: [xsl] Select first two elements, Florent Georges | Date | RE: [xsl] Grouping over multiple fi, Michael Kay |
Month |