fn:index-of
Returns a sequence of positive integers giving the positions within the sequence
$seq
of items that are equal to $search
.
Signatures
fn:index-of(
$seq as xs:anyAtomicType*,
$search as xs:anyAtomicType
) as xs:integer*
fn:index-of(
$seq as xs:anyAtomicType*,
$search as xs:anyAtomicType,
$collation as xs:string
) as xs:integer*
Properties
The two-argument form of this function is deterministic, context-dependent, and focus-independent. It depends on collations, and implicit timezone.
The three-argument form of this function is deterministic, context-dependent, and focus-independent. It depends on collations, and static base URI, and implicit timezone.
Rules
The function returns a sequence of positive integers giving the positions within the
sequence $seq
of items that are equal to $search
.
The collation used by this function is determined according to the rules in Choosing a collation. This collation is used when string comparison is required.
The items in the sequence $seq
are compared with $search
under
the rules for the eq
operator. Values of type xs:untypedAtomic
are compared as if they were of type xs:string
. Values that cannot be
compared, because the eq
operator is not defined for their types, are
considered to be distinct. If an item compares equal, then the position of that item
in
the sequence $seq
is included in the result.
The first item in a sequence is at position 1, not position 0.
The result sequence is in ascending numeric order.
Notes
If the value of $seq
is the empty sequence, or if no item in
$seq
matches $search
, then the function returns the empty
sequence.
No error occurs if non-comparable values are encountered. So when comparing two atomic
values, the effective boolean value of fn:index-of($a, $b)
is true if
$a
and $b
are equal, false if they are not equal or not
comparable.
Examples
The expression fn:index-of((10, 20, 30, 40), 35)
returns ()
.
The expression fn:index-of((10, 20, 30, 30, 20, 10), 20)
returns (2, 5)
.
The expression fn:index-of(("a", "sport", "and", "a", "pastime"),
"a")
returns (1, 4)
.
The expression fn:index-of(current-date(), 23)
returns ()
.
The expression fn:index-of([1, [5, 6], [6, 7]], 6)
returns (3, 4)
. (The array is atomized to a sequence of five integers).
If @a
is an attribute of type xs:NMTOKENS
whose string
value is "red green blue"
, and whose typed value is therefore
("red", "green", "blue")
, then fn:index-of(@a, "blue")
returns 3
. This is because the function calling mechanism atomizes the
attribute node to produce a sequence of three xs:NMTOKEN
values.