Subject: Re: [xsl] Re: using keys for counting not sorting From: "Ahmad J. Reeves" <ahmad@xxxxxxxxxxxxxx> Date: Mon, 31 Dec 2001 18:47:11 +0000 |
Many thanks Dimitre for your excellent answer. I'm going through your solution to make sure I understand how it works correctly, Cheers Ahmad At 12:19 AM 12/30/01 -0800, you wrote: >Oopps... > >In my previous message I didn't take into account "characters" that only received >messages, but didn't send any. > >Here's the now correct solution: > ><xsl:stylesheet version="1.0" >xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> > > <xsl:output method="text"/> > > <xsl:key name="kByID" match="DIRECT" use="CHARACTER_ID"/> > <xsl:key name="kByTargetID" match="TARGET_CHARACTER_ID" use="."/> > > <xsl:variable name="vUniqueCharactersSending" > select="LOG/DIRECT[generate-id() > = > generate-id(key('kByID', > CHARACTER_ID > )[1] > ) > ]"/> > > <xsl:variable name="vUniqueCharactersReceiving" > select="LOG/DIRECT/TARGET_CHARACTER_ID > [generate-id() > = > generate-id(key('kByTargetID', > . > )[1] > ) > ]"/> > > <xsl:variable name="vNumCharactersSending" > select="count($vUniqueCharactersSending)"/> > > <xsl:variable name="vNumCharactersReceiving" > select="count($vUniqueCharactersReceiving)"/> > > <xsl:variable name="vTotalSent" > select="count(LOG/DIRECT/CHARACTER_ID)"/> > > <xsl:variable name="NL" select="'
'"/> > > <xsl:template match="/"> > <xsl:for-each select="$vUniqueCharactersSending"> > <xsl:value-of select="concat('CHARACTER_ID ',CHARACTER_ID, > ' sent ', > count(key('kByID',CHARACTER_ID)), > ' messages, received ', > count(key('kByTargetID',CHARACTER_ID)), > $NL > )"/> > </xsl:for-each> > > <xsl:for-each select="$vUniqueCharactersReceiving > [not(key('kByID', .))]"> > > <xsl:value-of select="concat('CHARACTER_ID ', ., > ' sent 0 messages, received ', > count(key('kByTargetID',.)), > $NL > )"/> > </xsl:for-each> > > <xsl:value-of select="$NL"/> > <xsl:value-of select="concat('Number of characters having sent a message: ', > $vNumCharactersSending, > $NL > )"/> > > <xsl:value-of select="concat('Number of characters having received a message: ', > $vNumCharactersReceiving, > $NL > )"/> > > <xsl:value-of select="$NL"/> > <xsl:value-of select="concat('Total sent: ', > $vTotalSent, > ', Average sent by a sending character: ', > $vTotalSent div $vNumCharactersSending, > '
', > > 'Total received: ', > $vTotalSent, > ', Average received by a receiving character: ', > $vTotalSent div $vNumCharactersReceiving, > '
' > > )"/> > </xsl:template> ></xsl:stylesheet> > >When this is applied to the following xml sorce document: > ><LOG> > <DIRECT> > <COMMUNICATION_TYPE>PAGETELL</COMMUNICATION_TYPE> > <Invoc_serial>27</Invoc_serial> > <Serial>3087908</Serial> > <USAGE>TELL</USAGE> > <MESSAGE_TYPE>EMOTE</MESSAGE_TYPE> > <CHARACTER_ID>10010</CHARACTER_ID> > <CHARACTER_STATUS>3</CHARACTER_STATUS> > <LOCATION_ID>45040</LOCATION_ID> > <TARGET_CHARACTER_ID>444444</TARGET_CHARACTER_ID> > <TARGET_CHARACTER_STATUS>6</TARGET_CHARACTER_STATUS> > <TARGET_CHARACTER_LOCATION_ID>23222</TARGET_CHARACTER_LOCATION_ID> > <MESSAGE>hello</MESSAGE> > <TIME>'Mon, 26 Nov 2001 15:40:29 +0000'</TIME> > </DIRECT> > > <DIRECT> > <COMMUNICATION_TYPE>PAGETELL</COMMUNICATION_TYPE> > <Invoc_serial>27</Invoc_serial> > <Serial>3087908</Serial> > <USAGE>TELL</USAGE> > <MESSAGE_TYPE>EMOTE</MESSAGE_TYPE> > <CHARACTER_ID>10010</CHARACTER_ID> > <CHARACTER_STATUS>3</CHARACTER_STATUS> > <LOCATION_ID>45040</LOCATION_ID> > <TARGET_CHARACTER_ID>444444</TARGET_CHARACTER_ID> > <TARGET_CHARACTER_STATUS>6</TARGET_CHARACTER_STATUS> > <TARGET_CHARACTER_LOCATION_ID>23222</TARGET_CHARACTER_LOCATION_ID> > <MESSAGE>hello</MESSAGE> > <TIME>'Mon, 26 Nov 2001 15:40:29 +0000'</TIME> > </DIRECT> > > <DIRECT> > <COMMUNICATION_TYPE>PAGETELL</COMMUNICATION_TYPE> > <Invoc_serial>27</Invoc_serial> > <Serial>3087908</Serial> > <USAGE>TELL</USAGE> > <MESSAGE_TYPE>EMOTE</MESSAGE_TYPE> > <CHARACTER_ID>444444</CHARACTER_ID> > <CHARACTER_STATUS>3</CHARACTER_STATUS> > <LOCATION_ID>45040</LOCATION_ID> > <TARGET_CHARACTER_ID>10010</TARGET_CHARACTER_ID> > <TARGET_CHARACTER_STATUS>6</TARGET_CHARACTER_STATUS> > <TARGET_CHARACTER_LOCATION_ID>23222</TARGET_CHARACTER_LOCATION_ID> > <MESSAGE>hello</MESSAGE> > <TIME>'Mon, 26 Nov 2001 15:40:29 +0000'</TIME> > </DIRECT> > > <DIRECT> > <COMMUNICATION_TYPE>PAGETELL</COMMUNICATION_TYPE> > <Invoc_serial>27</Invoc_serial> > <Serial>3087908</Serial> > <USAGE>TELL</USAGE> > <MESSAGE_TYPE>EMOTE</MESSAGE_TYPE> > <CHARACTER_ID>50050</CHARACTER_ID> > <CHARACTER_STATUS>3</CHARACTER_STATUS> > <LOCATION_ID>45040</LOCATION_ID> > <TARGET_CHARACTER_ID>60060</TARGET_CHARACTER_ID> > <TARGET_CHARACTER_STATUS>6</TARGET_CHARACTER_STATUS> > <TARGET_CHARACTER_LOCATION_ID>23222</TARGET_CHARACTER_LOCATION_ID> > <MESSAGE>hello</MESSAGE> > <TIME>'Mon, 26 Nov 2001 15:40:29 +0000'</TIME> > </DIRECT></LOG> > >The result is: > >CHARACTER_ID 10010 sent 2 messages, received 1 >CHARACTER_ID 444444 sent 1 messages, received 2 >CHARACTER_ID 50050 sent 1 messages, received 0 >CHARACTER_ID 60060 sent 0 messages, received 1 > >Number of characters having sent a message: 3 >Number of characters having received a message: 3 > >Total sent: 4, Average sent by a sending character: 1.3333333333333332 >Total received: 4, Average received by a receiving character: 1.3333333333333332 > > >Cheers, >Dimitre. > >__________________________________________________ >Do You Yahoo!? >Send your FREE holiday greetings online! >http://greetings.yahoo.com > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list > > ------------------------------------------------- Ahmad J Reeves BSc (Hons) MSc (Dist) PhD Student Information, Media & Communication Research Group Department of Computer Science Queen Mary, University of London E1 4NS Tel +44(0) 207 882 5257 Fax +44(0) 208 980 6533 http://www.dcs.qmw.ac.uk/imc XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] silbings, Michael Kay | Thread | [xsl] Re: Re: Assignment no, dynami, Dimitre Novatchev |
RE: [xsl] silbings, Michael Kay | Date | [xsl] Re: Re: Assignment no, dynami, Dimitre Novatchev |
Month |