XSLT 3.0 implementation

XSLT 3.0 features are available only if XSLT 3.0 support is explicitly requested, for example by specifying -xsltversion:3.0 on the command line.

Maps, as defined in the draft XSLT 3.0 specification, are implemented as an extension to XPath 3.0. For details see Maps in XPath 3.0.

The xsl:merge instruction is implemented.

Pattern syntax in the form ~ItemType is supported, for example match="~xs:integer" matches an integer. Predicates are allowed on such patterns, for example ~xs:integer[. gt 0].

Associated with this change, xsl:apply-templates (as well as xsl:next-match and xsl:apply-imports can be used to process any kind of item, not only nodes (for example, atomic values or maps)

Similarly, xsl:for-each-group with the group-starting-with or group-ending-with patterns can now process a sequence of atomic values.

In the xsl:mode declaration, the values supported for the on-no-match attribute have changed, in line with changes in the XSLT 3.0 working draft. The option copy is renamed shallow-copy, stringify is renamed text-only-copy, and discard is renamed deep-skip. Two new options are added: deep-copy and shallow-skip.

When xsl:copy is used with a select attribute (new feature in XSLT 3.0), the context item for evaluation of the contained sequence constructor is now the item selected by the select attribute.

The intersect and except operators can now be used in match patterns; multiple operators and parentheses are allowed. Parentheses are also allowed around an expression that is then filtered by a predicate, for example match="(foo|bar)[*]" or (//para)[1].