Subject: [xsl] preceeding sibling on a first node From: marina <marina777uk@xxxxxxxxx> Date: Sun, 8 Feb 2004 02:25:27 -0800 (PST) |
Hi, What does a preceeding sibling check return in the first child node position? Here's an xml snippet ------------------------------------------ <LOG> <DIRECT> <LOCATION_ID> 24 </LOCATION_ID> <TARGET_CHARACTER_LOCATION_ID> 2799 </TARGET_CHARACTER_LOCATION_ID> <MESSAGE> hello </MESSAGE> </DIRECT> <DIRECT> <LOCATION_ID> 24488 </LOCATION_ID> <TARGET_CHARACTER_LOCATION_ID> 2455 </TARGET_CHARACTER_LOCATION_ID> <MESSAGE> hello </MESSAGE> </DIRECT> <DIRECT> <LOCATION_ID> 23388 </LOCATION_ID> <TARGET_CHARACTER_LOCATION_ID> 266 </TARGET_CHARACTER_LOCATION_ID> <MESSAGE> hello </MESSAGE> </DIRECT> <DIRECT> <LOCATION_ID> 293 </LOCATION_ID> <TARGET_CHARACTER_LOCATION_ID> 293 </TARGET_CHARACTER_LOCATION_ID> <MESSAGE> no </MESSAGE> </DIRECT> <DIRECT> <LOCATION_ID> 31132 </LOCATION_ID> <TARGET_CHARACTER_LOCATION_ID> 31132 </TARGET_CHARACTER_LOCATION_ID> <MESSAGE> no </MESSAGE> </DIRECT> <DIRECT> <LOCATION_ID> 24488 </LOCATION_ID> <TARGET_CHARACTER_LOCATION_ID> 24488 </TARGET_CHARACTER_LOCATION_ID> <MESSAGE> no </MESSAGE> </DIRECT> </LOG> ----------------------------------------------- 3 different locations all duplicate messages and 3 the same locations with duplicate messages. Here's my stylesheet that tells me how many messages were sent, which to the same and which to different locations and removes duplicate messages by checking the preceeding MESSAGE tag. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text"/> <xsl:variable name="vTotalSent" select="count(LOG/*/MESSAGE)"/> <xsl:variable name="vNumNotSame" select="count(LOG/*[number(LOCATION_ID) != number(TARGET_CHARACTER_LOCATION_ID) and preceding-sibling::*[1]/MESSAGE != MESSAGE])"/> <xsl:variable name="vNumSame" select="count(LOG/*[number(LOCATION_ID) = number(TARGET_CHARACTER_LOCATION_ID) and preceding-sibling::*[1]/MESSAGE != MESSAGE])"/> <xsl:template match="/"> <xsl:text> The total number of messages sent was: </xsl:text> <xsl:value-of select="$vTotalSent"/> <xsl:text> The total number of messages sent to a different location was </xsl:text> <xsl:value-of select="$vNumNotSame"/> <xsl:text> The total number of messages sent to the same location was </xsl:text> <xsl:value-of select="$vNumSame"/> </xsl:template> </xsl:stylesheet> ------------------------------------------- And my output is: The total number of messages sent was: 6 The total number of messages sent to a different location was 0 The total number of messages sent to the same location was 1 -------------------------------- So it correctly removed the duplicates from messages sent to the same location, but counted 0 for the first three different locations, instead of 1. Is it because for the first node there is no preceeding sibling and therefore nothing to check? I know its to do with the position of the nodes as I tried swapping all the same location nodes with the different location nodes i.e. put the same location nodes at the top of the file and got the opposite result. Kind Regards Marina __________________________________ Do you Yahoo!? Yahoo! Finance: Get your refund fast by filing online. http://taxes.yahoo.com/filing.html XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Literals in XSLT, Michael Kay | Thread | RE: [xsl] preceeding sibling on a f, Michael Kay |
[xsl] Literals in XSLT, Ruth Ablett | Date | RE: [xsl] Literals in XSLT, Jim Fuller |
Month |