This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: testing for last node in a list
- To: Annmarie dot Rubin at East dot Sun dot COM, Jeni dot Tennison at epistemics dot co dot uk
- Subject: Re: testing for last node in a list
- From: Ann Marie Rubin - Sun PC Networking Engineering <Annmarie dot Rubin at East dot Sun dot COM>
- Date: Wed, 24 May 2000 11:09:03 -0400 (EDT)
- Cc: xsl-list at mulberrytech dot com
- Reply-To: xsl-list at mulberrytech dot com
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@epistemics.co.uk Tue May 23 06:01:21 2000
X-Sender: JTennison@NTServer
To: Annmarie.Rubin@east.sun.com
From: Jeni Tennison <Jeni.Tennison@epistemics.co.uk>
Subject: Re: testing for last node in a list
Cc: xsl-list@mulberrytech.com
Mime-Version: 1.0
X-MDaemon-Deliver-To: Annmarie.Rubin@East.Sun.COM
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@epistemics.co.uk
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list