Subject: RE: [xsl] Grouping over multiple files From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Sat, 14 Jan 2006 15:19:14 -0000 |
Try replacing <xsl:copy-of select="."/> with <revenue source="{document-uri(/)}"> <xsl:value-of select="."/> </revenue> though document-uri will give you an absolute URI and you may want to cut it down. Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: Kevin Bird [mailto:kevin.bird@xxxxxxxxxxxxxxxxxxxxxxx] > Sent: 14 January 2006 14:24 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] Grouping over multiple files > > 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 -> |
---|---|---|
[xsl] Grouping over multiple files, Kevin Bird | Thread | RE: [xsl] Grouping over multiple fi, Florent Georges |
[xsl] Grouping over multiple files, Kevin Bird | Date | RE: [xsl] Grouping over multiple fi, Florent Georges |
Month |