[xsl] preceding-sibling reversed ?

Subject: [xsl] preceding-sibling reversed ?
From: "Bjorn Boxstart" <boxstart@xxxxxxxx>
Date: Thu, 29 Aug 2002 12:13:22 +0200
Hello,

I created in an XSL-T stylesheet a variable that contains presentation
slides. Each of the slides is a '<div>' element with a 'class' attribute
with the value 'slide' and all these elements have and 'id' attribute with a
unique value. All slides exist in the same level in the hierarchy of the
document.

I wanted to add a 'previous' and 'next' button to each slide that (off
course) links to the previous and next slide in the presentation.

to be able to create the link to the next slide, I used the following lines:

<a>
	<xsl:attribute name="href">
		#<xsl:value-of select="following-sibling::div[@class = 'slide']/@id"/>
	</xsl:attribute>
	<img src="images/icons/next.gif" border="0"/>
</a>

This works perfect, however for the previous slide I wanted to use:

<a>
	<xsl:attribute name="href">
		#<xsl:value-of select="preceding-sibling::div[@class = 'slide']/@id"/>
	</xsl:attribute>
	<img src="images/icons/back.gif" border="0"/>
</a>

This always results in a link to the first slide (msxml). A bell started to
ring and I thought that the listing of the elements probabley would be
reversed, so I tried the following:

<a>
	<xsl:variable name="pos" select="position()" />
	<xsl:attribute name="href">
		#<xsl:value-of select="preceding-sibling::div[@class = 'slide' and
position() = $pos -1]/@id"/>
	</xsl:attribute>
	<img src="images/icons/back.gif" border="0"/>
</a>

This also results in a link to the first slide. Now I have the following
that works fine, but I don't really understand why! Can anybody please
explain me this?

<a>
	<xsl:attribute name="href">
		#<xsl:value-of select="preceding-sibling::div[@class = 'slide' and
position() = 1]/@id"/>
	</xsl:attribute>
	<img src="images/icons/back.gif" border="0"/>
</a>

thanks in advance!

Bjorn Boxstart


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


Current Thread