This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: Indexing Tree Elements
At 00/07/07 13:14 +0100, David Carlisle wrote:
> > is it possible that it may compare its attributes with the attributes
> > of the previous document-tree node of the same level?
>
><xsl:if test="@foo = preceding-sibling::*/@foo">
> 'tis the same
></xsl:if>
I'm sorry if this sounds pedantic, but because the second argument is a
node list, the above expression will be true if *any* of the preceding
siblings nodes has an attribute named "foo" of the equal value.
To check the immediately preceding element for an attribute named "foo", I
would think one would use:
<xsl:if test="@foo = preceding-sibling::*[1]/@foo">
To check the the closest (in proximity) preceding element with an attribute
named "foo", I would think one would use:
<xsl:if test="@foo = preceding-sibling::*[@foo][1]/@foo">
I hope this helps and is considered constructive.
................. Ken
T:\ftemp>type foo.xsl
<?xml version="1.0"?><!--foo.xsl-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/"> <!--root rule-->
<xsl:for-each select="//test[last()]">
@foo = preceding-sibling::*/@foo: <xsl:choose>
<xsl:when test="@foo = preceding-sibling::*/@foo">
<xsl:text>yes</xsl:text>
</xsl:when>
<xsl:otherwise>no</xsl:otherwise>
</xsl:choose>
@foo = preceding-sibling::*[1]/@foo: <xsl:choose>
<xsl:when test="@foo = preceding-sibling::*[1]/@foo">
<xsl:text>yes</xsl:text>
</xsl:when>
<xsl:otherwise>no</xsl:otherwise>
</xsl:choose>
@foo = preceding-sibling::*[@foo][1]/@foo: <xsl:choose>
<xsl:when test="@foo = preceding-sibling::*[@foo][1]/@foo">
<xsl:text>yes</xsl:text>
</xsl:when>
<xsl:otherwise>no</xsl:otherwise>
</xsl:choose>
<xsl:text> (</xsl:text>
<xsl:value-of select="preceding-sibling::*[@foo][1]/@foo"/>
<xsl:text>)</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
T:\ftemp>type foo.xml
<?xml version="1.0"?>
<doc>
<test foo="x">a</test>
<test foo="y">b</test>
<test >c</test>
<test foo="z">d</test>
<test >e</test>
<test foo="x">f</test>
</doc>
T:\ftemp>xt foo.xml foo.xsl
<?xml version="1.0" encoding="utf-8"?>
@foo = preceding-sibling::*/@foo: yes
@foo = preceding-sibling::*[1]/@foo: no
@foo = preceding-sibling::*[@foo][1]/@foo: no (z)
T:\ftemp>rem
--
G. Ken Holman mailto:gkholman@CraneSoftwrights.com
Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/
Box 266, Kars, Ontario CANADA K0A-2E0 +1(613)489-0999 (Fax:-0995)
Web site: XSL/XML/DSSSL/SGML services, training, libraries, products.
Book: Practical Transformation Using XSLT and XPath ISBN1-894049-04-7
Next instructor-led training: 2000-09-19/20,2000-10-03,2000-10-04,
- 2000-10-05,2000-11-13,2001-01-27
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list