Re: Indexing Tree Elements

Subject: Re: Indexing Tree Elements
From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx>
Date: Fri, 07 Jul 2000 09:16:55 -0400
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@xxxxxxxxxxxxxxxxxxxx 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



Current Thread