Re: [xsl] Equivalence between XSL and XPath expression

Subject: Re: [xsl] Equivalence between XSL and XPath expression
From: xptm <xptm@xxxxxxx>
Date: Sat, 11 Dec 2004 10:58:47 +0000
So, in conclusion,

The equivalent on

<xsl:variable name="position">
	<xsl:number level='any' count="menu"/>
</xsl:variable>

is

count(./ancestor-or-self::*)+count(./preceding::*)



but the generalization to every node on a tree of my menu use

count(./ancestor-or-self::menu)+count(./preceding::menu)

is

count(./ancestor-or-self::node())+count(./preceding::node())


Ok, thanks peolple...






Dimtre Novatchev wrote:

On Sat, 11 Dec 2004 00:54:19 +0000, xptm <xptm@xxxxxxx> wrote:


So basically you're saying that the root element doesn't have the self::
axis, besides the obvious ancestor, parent and preceding. Is that so?



Any node, including "/" "has a self axis".


However, the expression you suggested:
count(./ancestor-or-self::*)+count(./preceding::*)


evaluates to 0 in the case when the context node is the document node.

The reason?

The principal node kind for the self axis is the element-node kind.

Therefore,

self::*

selects the context node only if the context node is an element. This
is not the case with the root (document) node.

Correct the above to:

self::node()

and it now selects the context node always, regardless of its node-kind.


Cheers, Dimitre.

Current Thread