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>
--~------------------------------------------------------------------
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>
--~--