# Filter expressions

The notation `E[P]`

is used to select items from the sequence obtained by evaluating
`E`

. If the predicate `P`

is numeric, the predicate selects an item if its
position (counting from 1) is equal to `P`

; otherwise, the *effective boolean value*
of `P`

determines whether an item is selected or not. The effective boolean value of a sequence
is false if the sequence is empty, or if it contains a single item that is one of: the boolean value
false, the zero-length string, or a numeric zero or NaN value. If the first item of the sequence is a node, or
if the sequence is a singleton boolean, number or string other than those listed above, the effective
boolean value is true. In other cases (for example, if the sequence contains two booleans or a date),
evaluating the effective boolean value causes an error.

From XPath 2.0, `E`

may be any sequence, it is not restricted to a node sequence. Within
the predicate, the expression `.`

(dot) refers to the context item, that is, the item
currently being tested. The XPath 1.0 concept of context node has thus been generalized, for example
`.`

can refer to a string or a number.

Generally the order of items in the result preserves the order of items in `E`

. As a
special case, however, if `E`

is a step using a reverse axis (e.g. preceding-sibling), the
position of nodes for the purpose of evaluating the predicate is in reverse document order, but the
result of the filter expression is in forwards document order.

In XPath 3.0, the postfix operators `[]`

(filter) and `()`

(function call)
may be mixed and apply in left-to-right order. For example `$a[3](2)`

selects the third
item in a sequence (of function items), and calls it with the argument value 2; while `$a(2)[3]`

calls the function item `$a`

with argument value 2, and then selects the third item in the resulting
sequence.