Subject: [xsl] Re: distinct moves problem From: "Ahmad J. Reeves" <ahmad@xxxxxxxxxxxxxx> Date: Fri, 18 Jan 2002 16:32:52 +0000 |
Hi Dimitre, Many thanks for that solution, It worked perfectly on the smaller file I tested it on. I am parsing xml files that are roughly 20meg and even after 4hrs of processing it still hadnt finished! Due to time constraints I actually had to go to the old version and count them manually ignoring the duplicates! Anyway, I'll have to get a faster machine. Many thanks Dimitre. Another question I have is that would it be possible to alter the same stylesheet so that it could produce a list of all of the locations in ascending order and the total number of people who were in that location without the duplicates i.e. where they sent more than one message in the same room e.g. Location # Characters 12343 12 12355 44 13655 133 54333 66 etc etc? Many thanks again for your time and help, Ahmad At 06:26 AM 1/9/02 -0800, you wrote: >Hi Ahmad, > >I'm still not sure I understand well, but here's a possible solution: > >1. Change the definition of the "kLocByCharacter" to: > > <xsl:key name="kLocByCharacter" > match="LOCATION_ID[not(. > = > ../preceding-sibling::DIRECT[1] > /LOCATION_ID) > ]" > use="../CHARACTER_ID"/> > >2. The key "kLocByValandChar" is no-longer needed -- may be removed. > >3. The end of the stylesheet should now be: > > <xsl:value-of select="$NL"/> > <xsl:value-of select="concat('Room moves by character:', $NL)"/> > > <xsl:for-each select="$vUniqueCharactersSending"> > <xsl:value-of select="concat('Character_ID: ', > CHARACTER_ID, > ':', > $NL > )"/> > <xsl:for-each select="key('kLocByCharacter',CHARACTER_ID)"> > > > <xsl:value-of select="concat(' ', ., $NL)"/> > > </xsl:for-each> > > </xsl:for-each> > > </xsl:template> ></xsl:stylesheet> > > >Bellow is the complete stylesheet: > ><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:key name="kLocByCharacter" > match="LOCATION_ID[not(. > = > ../preceding-sibling::DIRECT[1] > /LOCATION_ID) > ]" > use="../CHARACTER_ID"/> > > <xsl:key name="kLocByValandChar" > match="LOCATION_ID" > use="concat(., '|', ../CHARACTER_ID)"/> > > <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:value-of select="$NL"/> > <xsl:value-of select="concat('Room moves by character:', $NL)"/> > > <xsl:for-each select="$vUniqueCharactersSending"> > <xsl:value-of select="concat('Character_ID: ', > CHARACTER_ID, > ':', > $NL > )"/> > <xsl:for-each select="key('kLocByCharacter',CHARACTER_ID)"> > > > <xsl:value-of select="concat(' ', ., $NL)"/> > > </xsl:for-each> > > </xsl:for-each> > > </xsl:template> ></xsl:stylesheet> > > >With this source xml 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>10010</CHARACTER_ID> > <CHARACTER_STATUS>3</CHARACTER_STATUS> > <LOCATION_ID>45020</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>45010</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>444444</CHARACTER_ID> > <CHARACTER_STATUS>3</CHARACTER_STATUS> > <LOCATION_ID>45030</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>444444</CHARACTER_ID> > <CHARACTER_STATUS>3</CHARACTER_STATUS> > <LOCATION_ID>45030</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>444444</CHARACTER_ID> > <CHARACTER_STATUS>3</CHARACTER_STATUS> > <LOCATION_ID>45010</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>45000</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> > > >It produces: > >CHARACTER_ID 10010 sent 4 messages, received 4 >CHARACTER_ID 444444 sent 4 messages, received 4 >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: 9, Average sent by a sending character: 3 >Total received: 9, Average received by a receiving character: 3 > >Room moves by character: >Character_ID: 10010: > 45040 > 45020 > 45040 >Character_ID: 444444: > 45010 > 45030 > 45010 >Character_ID: 50050: > 45000 > > > >Cheers, >Dimitre. > > > >__________________________________________________ >Do You Yahoo!? >Send FREE video emails in Yahoo! Mail! >http://promo.yahoo.com/videomail/ > ------------------------------------------------- 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] Re: distinct moves proble, Ahmad J Reeves | Thread | [xsl] Re: distinct moves problem, Dimitre Novatchev |
RE: [xsl] general problem followup, Andrew Welch | Date | [xsl] re: general problem, saodl |
Month |