Re: [xsl] Expression Logic Problem

Subject: Re: [xsl] Expression Logic Problem
From: Joerg Heinicke <joerg.heinicke@xxxxxx>
Date: Thu, 01 Aug 2002 02:02:46 +0200
1. preceding-sibling:

Instead of <xsl:if test="self::node()[1]"> use <xsl:if
test="not(preceding-sibling::field/@id = @id)">

won't this return the very first field in document order?


No, it only tests whether there is not a preceding-sibling field element, which has the same @id like the current one.

You can write "not(preceding-sibling::field[@id = current()/@id])" if you want.


It is my understanding that if you have:

<a>
  <f id="1"/>
  <f id="2"/>
  <f id="2"/>
</a>

and you happen to be on the 3rd f node you would get:

preceding-sibling::field/@id=1

and current()/@id=2

but if you use:

preceding-sibling::field[1]/@id=2

Is this wrong?

It's not soo wrong ;-) All your statements are correct when using <xsl:value-of select="..."/>. And they were correct if I had used "preceding-sibling::field/@id != @id.


In the example above the node set of all id attributes of all preceding-sibling field elements are compared with the node set of the id attribute of the current node.

It obtains for the usage of not(): it's true if no value in node set 1 is equal to a value in node set 2.

While for != : it's true if one value in node set 1 is not equal to the values in node set 2.

If I'm wrong or unprecise please correct me.

Regards,

Joerg


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



Current Thread