A predicate is an XPath expression that filters a node-set with respect to an axis and produces a new node-set. This filtering process involves sequentially evaluating the predicate against each node in the node set. Each time that the predicate is evaluated against a node:
The context node is the node currently being evaluated.
The context size is the number of nodes in the node-set being evaluated.
The context position is the position of the context node in the node-set.
This last context, that of the context node in the node-set, is relative to the direction that the axis specified in the location step navigates the document tree. Typically, an axis navigates the tree in either a forward or reverse direction:
A forward axis is an axis that contains the context node or nodes that are after the context node. The
following-sibling::axes are forward axes. These forward axes number the nodes in the node-set in document order, starting with the first position as 1.
A reverse axis is an axis that contains the context node or nodes that are before the context node. The
preceding-sibling::axes are reverse axes. These reverse axes number the nodes in the node-set in reverse document order, starting with the first position as 1.
As to the remaining axes, the
parent:: axes return a single node. Therefore, the designation of forward or reverse does not make sense for these two axes. There is no order defined for the
namespaces:: axes; so they too are neither forward nor reverse axes.
A predicate expression evaluates to either a numeric or Boolean value.
If the predicate results in a number, XPath compares that number to the context position of the context node. If the number and the position are the same (that is, the context node is in the appropriate position in the tree), the predicate evaluates to true and the context node is included in the new node-set. Otherwise, the context node is excluded from the new node-set.
If the predicate does not result in a number, XPath uses the
boolean function to convert the result to a Boolean value. For example, the predicate
[genre='Computer'] results in a node-set. If the context node has a child
<genre> element with the content
Computer, this predicate evaluates to true and the context node is included in the new node-set. Otherwise, the context node is excluded from the new node-set.
A numeric predicate [x] is equivalent to the Boolean predicate