Each location step may have zero or more predicates. A predicate is an XPath expression enclosed in square brackets that follows the node test in the location step. This expression most commonly, but not necessarily, returns a Boolean value. In the following location path:
/person[1]/profession[.="physicist"][position( )<3]
[1]
, [.="physicist"]
, and [position( )<3]
are predicates. An XPath
processor works from left to right in an expression. After it has
evaluated everything that precedes the predicate, it's left with a
context node list that may contain no nodes, one node, or more than
one node. For most axes, including child
, following-sibling
, following
, and descendant
, this list is in document order.
For the ancestor
, preceding
, and preceding-sibling
axes, this list is in
reverse document order.
The predicate is evaluated against each node in the context node
list. If the expression returns true, then that node is retained in
the list. If the expression returns false, then the node is removed
from the list. If the expression returns a number, then the node being
evaluated is left in the list if and only if the number is the same as
the position of that node in the context node list. If the expression
returns a non-Boolean, nonnumber type, then that return value is
converted to a Boolean using the boolean()
function, described later, to
determine whether it retains the node in the set.