Subject: Re: [xsl] Re: Hi Dimitre, question on extra tags. From: Ahmad J Reeves <ahmad@xxxxxxxxxxxxxx> Date: Tue, 29 Jan 2002 15:32:59 +0000 |
Thanks Dimitre thats great. Dimitre Novatchev wrote: > > --- Ahmad J Reeves <ahmad@xxxxxxxxxxxxxx> wrote: > > Hi Dimitre, > > > > If you remember, you sent me this excellent stylesheet that > > counts the number of mesages sent and received by individuals, > > but also their movements without duplicates. > > > > I have discovered that 20% of my files have extra tags that need > > parsing as well. So this stylesheet looks for <DIRECT> tags only, but > > there are also > > > > <LOCAL> > > <GLOBAL> > > <ADMIN> > > > > tags with the same format as <DIRECT>, and they are all siblings at > > the > > same level, e.g > > > > <LOG> > > <DIRECT> > > <LOCAL> > > <GLOBAL> > > <ADMIN> > > <LOG> > > > > > > Is it easy to adjust this stylesheet to account for these extra > > tags? > > Hi Ahmad, > > Yes, it is straightforward: > > 1. Change : > <xsl:key name="kByID" match="DIRECT" use="CHARACTER_ID"/> > to > <xsl:key name="kByID" match="DIRECT | LOCAL | GLOBAL | ADMIN" > use="CHARACTER_ID"/> > > 2. Change all occurences of > LOG/DIRECT > to > LOG/* > > Bellow is the modified 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 | LOCAL | GLOBAL | ADMIN" > 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/*[generate-id() > = > generate-id(key('kByID', > CHARACTER_ID > )[1] > ) > ]"/> > > <xsl:variable name="vUniqueCharactersReceiving" > select="LOG/*/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/*/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="/LOG/*/CHARACTER_ID > [. = current()/CHARACTER_ID]"> > > <xsl:if test="not(../LOCATION_ID > = ../preceding-sibling::DIRECT > [CHARACTER_ID = current()] > /LOCATION_ID)"> > > <xsl:value-of select="concat(' ', ../LOCATION_ID, $NL)"/> > </xsl:if> > > </xsl:for-each> > > </xsl:for-each> > > </xsl:template> > </xsl:stylesheet> > > When applied on the following 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> > > <LOCAL> > <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> > </LOCAL> > > <ADMIN> > <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> > </ADMIN> > > <GLOBAL> > <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> > </GLOBAL> > > <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> > > The result produced is: > > 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 > Character_ID: 444444: > 45010 > 45030 > 45010 > Character_ID: 50050: > 45000 > > Hope this helped. > > Cheers, > Dimitre Novatchev. > > __________________________________________________ > Do You Yahoo!? > Great stuff seeking new owners in Yahoo! Auctions! > http://auctions.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, and Communication Research Group, Dept of Computer Science,Queen Mary,University of London, E1 4NS Tel +44 (0)20 7882 5257 http://www.dcs.qmw.ac.uk/imc/ ----------------------------------------------------- XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Re: Hi Dimitre, question on e, Dimitre Novatchev | Thread | [xsl] if if ..., Frederic Leclercq |
[xsl] Remove duplicates from a list, Asim Tozlu | Date | [xsl] Support For Automatic Thai Wo, W. Eliot Kimber |
Month |