Re: [xsl] Positional predicates in pattern matching

Subject: Re: [xsl] 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