Subject: Re: Positional predicates in pattern matching
From: Josh Canfield <joshcanfield@xxxxxxxxx>
Date: Fri, 2 Jul 2004 12:10:55 -0700
|
Take a look at http://www.w3.org/TR/xpath#section-Location-Steps
"The initial node-set is filtered by the first predicate to generate a
new node-set; this new node-set is then filtered using the second
predicate, and so on. The final node-set is the node-set selected by
the location step. The axis affects how the expression in each
predicate is evaluated and so the semantics of a predicate is defined
with respect to an axis. See [2.4 Predicates]."
This clearly lays out how multiple predicates are evaluated, and what
their node-set context is.
Try thinking about it as layers of filters.
The first predicate [something] returns a node-set containing only
nodes which have a child element named "something". The second
predicate is operating on this new node-set, so [2] returns the second
node in that list.
Consider the following xml:
<nodes>
<b/>
<b id="1"><something id="1.1"/></b>
<b id="2"/>
<b id="3"><something id="3.1"/></b>
</nodes>
this xsl:
<xsl:copy-of select="/nodes/b[something]"/>
would output
<b id="1"><something id="1.1"/></b>
<b id="3"><something id="3.1"/></b>
this xsl:
<xsl:copy-of select="/nodes/b[something][2]"/>
would output
<b id="3"><something id="3.1"/></b>
Does that help?
Josh
On Fri, 2 Jul 2004 18:24:48 +0100, Kevin Jones <kjones@xxxxxxxxxxx> wrote:
>
> I am clearly missing something here or at least not explaining very well.
>
> If we are talking about a pattern,
>
> b[2] - match the 'b' which is the second sibling 'b'
>
> b[something][2] - match the second node that survives the match b[something]
>
> At least that is what I read the standard & earlier quote as saying although I
> could clearly be wrong on one or both counts. I suspect both of you are
> saying,
>
> b[something][2] - match the 'b' which is the second sibling 'b' if 'something'
> evaluates to true.
>
> This is what I understand Saxon to be doing.
>
> The standard explains how the first predicate evaluation starts but is rather
> silent on the effect on subsequent predicates. The simplest argument for the
> first behaviour is that it is after the first predicate we follow normal
> XPath behaviour.
>
> Thanks for your replies,
> Kev.
>
>
>
>
> --+------------------------------------------------------------------
> 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@xxxxxxxxxxxxxxxxxxxxxx>
> --+--
>
>
| Current Thread |
|
Michael Kay - Fri, 2 Jul 2004 17:03:46 +0100
|
|