In conjunction with
xsl:try instruction allows recovery from dynamic errors occurring within the expression it wraps.
Available in XSLT 3.0. From Saxon 9.8, available in all editions. Implemented in Saxon-PE and Saxon-EE since Saxon 9.6.
- Category: instruction
- Content: ( sequence-constructor ,
- Permitted parent elements: any XSLT element whose content model is sequence-constructor; any literal result element
- The expression to be evaluated by the instruction may be defined either by a
selectattribute, or by an enclosed sequence constructor.
- The value
nois used to relax the requirement to recover result trees when failures occur in the course of evaluating the
xsl:tryinstruction. The default is
yes. (This attribute had no effect prior to Saxon 9.9.)
Notes on the Saxon implementation⚓︎
Saxon 9.9 no longer ignores the value of the
rollback-output attribute. If set to "
no", when the instruction is evaluated in "push" mode, the output of
xsl:try is not buffered, but is written directly to the result destination. If a dynamic error occurs, the relevant
xsl:catch is effective only if no output has yet been written to that destination.
It is possible to have more than one
xsl:catch within an
xsl:try; the first one that matches the error is used.
xsl:catch, a number of variables are available in the namespace
err:code- the error code as a QName
err:description- the error description (error message)
err:value- the error object (if available)
err:module- the URI of the stylesheet module in which the error occurred
err:line-number- the line-number of the source stylesheet where the error occurred
err:column-number- for Saxon this will generally be unknown (-1)
The error can be re-thrown by using the
The following example shows how to recover from an error in evaluating an XPath expression (in this case, divide-by-zero):
<xsl:try select="salary div length-of-service"> <xsl:catch errors="err:FAOR0001" select="()"/> </xsl:try>
The following example shows how to recover from an error in evaluating a sequence of XSLT instructions (in this case, a validation error):
<xsl:try> <xsl:copy-of select="$result" validation="strict"/> <xsl:catch> <xsl:message>Warning: validation of result document failed: Error code: <xsl:value-of select="$err:code"/> Reason: <xsl:value-of select="$err:description"/> </xsl:message> <xsl:sequence select="$result"/> </xsl:catch> </xsl:try>