Patterns in XSLT 3.0
XSLT 3.0 introduces a new pattern syntax
.[expression]
: this matches any item for which the
effective boolean value of the expression (evaluated with that item as the context
item) is true. For example .[. gt 0]
will match any item (either an atomic number,
or a node that atomizes to a number) if it is greater than zero, while .[nilled()]
matches any
element that is nilled (@xsi:nil='true'
). Note that if the predicate cannot be evaluated
because the item is of the wrong type, no error occurs, the pattern simply does not match.
Other XSLT 3.0 extensions to patterns that are implemented in Saxon 9.6 include the following:
The intersect
and except
operators are allowed at the top
level: for example match="* except br"
.
Parentheses may be used in conjunction with a predicate, for example
match="(//para)[1]"
Any downwards axis may be used in a pattern, for example descendant
or
descendant-or-self
.
A pattern can consist simply of a variable reference: match="$v"
. This
matches any node that is present in the value of $v
. For a pattern used in
template matching, this will necessarily be a global variable.
A pattern can also be a path starting with a variable reference: match="$v//book"
matches any book
element that is a descendant of a node in $v
.
Patterns can be restricted to match nodes within a particular document, for example
match="doc('books.xml')//book
. (Note that Saxon will only read the document once,
so this is not an expensive operation).