xsl-list
[Top] [All Lists]

Re: [xsl] document function cached?

2013-02-11 09:46:53
On Mon, 2013-02-11 at 10:56 +0100, Michel Hendriksen wrote:
 That is exactly what I find kinda weird. As I understand
it[position()] is short for [position() = position()]. And [3] will be
short for [position() = 3]. This would explain the behavior. So its
actually the shorthand notation that makes things kinda
weird/confusing.

There are two things working against [position()] being useful, one is
the meaning of having a predicate expression evaluating to an integer
(which means [position()] is equivalent to [position() = position()].
But even when this is taken into account there's another thing which
makes [position()] problematic. 

The second one, which Michael mentioned in his previous email is the
meaning of position(), generally speaking. Let's ignore the shorthand.
If someone wants "foo[position()]", then when the XSLT processor is
looking at the first element in the list of foo elements, position()
evaluates to 1, when the processor looks at the 2nd, position()
evaluates to 2, when it looks at the 3rd, position() evaluates to 3,
etc. So as the processor walks the list, the position which the user
asked changes with each element and happens to be exactly the position
of the element the processor is looking at. So when the processor looks
at the nth element, it sees the user requesting the nth element and thus
selects it, which makes "foo[position()]" equivalent to "foo".

And this is why when someone has "foo[position()]" in their code,
typically the problem is that they are thinking about some *other*
position than what position() means in the predicate above. This
position they want would be a "position outside the predicate", to use
Michael's language.

Sincerely,
Louis



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>