Re: testing for last node in a list

Subject: Re: testing for last node in a list
From: Ann Marie Rubin - Sun PC Networking Engineering <Annmarie.Rubin@xxxxxxxxxxxx>
Date: Wed, 24 May 2000 11:09:03 -0400 (EDT)
Jeni,

Here's another tough one.  

Now I need to output the @NAME of each ancestor, except the last one, with the href tag,
except for the last one. The last ancestor doesn't need a href tag because it is the name of the current 
matched class. 

Using your approach, I ask myself what do I know about node X.  In this case, the @NAME value of Node X 
always equals the @NAME value of the matched node when the template was called.  

So, I tried to define a variable to store the name of the matched class. Then I could compare the name 
of the matched class to the name of the current context node.  But the value of the variable is 
automatically updated each time the template is called.  

Ann Marie


<xsl:variable name="matchedclass"><xsl:value-of select="@NAME"/></xsl:variable>
	X-Unix-From: Jeni.Tennison@xxxxxxxxxxxxxxxx  Tue May 23 06:01:21 2000
	X-Sender: JTennison@NTServer
	To: Annmarie.Rubin@xxxxxxxxxxxx
	From: Jeni Tennison <Jeni.Tennison@xxxxxxxxxxxxxxxx>
	Subject: Re: testing for last node in a list
	Cc: xsl-list@xxxxxxxxxxxxxxxx
	Mime-Version: 1.0
	X-MDaemon-Deliver-To: Annmarie.Rubin@xxxxxxxxxxxx
	Content-Transfer-Encoding: 8bit
	X-MIME-Autoconverted: from quoted-printable to 8bit by purol.East.Sun.COM id GAA17422
	
	Ann,
	
	>I am generating a list of ancestor nodes for a matched CLASS element. The
	XSL 
	>calls this template to output the ancestors when a CLASS is matched. I
	want to 
	>output a "|" character after each CLASS node, EXCEPT the last one.  I am
	unable 
	>to express the correct test for the last node in this list. I tried using 
	><xsl:if test="position()=last()">, but this statement returns true each
	time the 
	>template is called.
	>
	>Is there another way to solve this?
	
	Try thinking in terms of 'if I just know about node X, what is is about
	node X that affects whether or not there is a | above or below me?'  The
	answer is that all nodes have a | above them apart from the one at the top
	of the hierarchy.  How can you tell if you are at the top of the hierarchy?
	 Because you don't have a parent node.  So, try:
	
	<!-- named template to do the hierarchy tracing -->
	<xsl:template match="CLASS" mode="hierarchy">
	  <xsl:if test="@SUPERCLASS">
	    <xsl:apply-templates select="key('classes', @SUPERCLASS)"
	mode="hierarchy"/>
	    <xsl:text>|</xsl:text>
	  </xsl:if>
	  <br data="{@SUPERCLASS}">
	    <a href="{@NAME}.html"><xsl:value-of select="@NAME"/></a>
	  </br>
	</xsl:template>
	
	Hope that helps,
	
	Jeni
	
	Dr Jeni Tennison
	Epistemics Ltd, Strelley Hall, Nottingham, NG8 6PE
	Telephone 0115 9061301 ? Fax 0115 9061304 ? Email
	jeni.tennison@xxxxxxxxxxxxxxxx
	
	




 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread