This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Expression Logic Problem


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]