xsl:try¶
In conjunction with xsl:catch
, the 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 ,
xsl:catch
, (xsl:catch
|xsl:fallback
)* ) - Permitted parent elements: any XSLT element whose content model is sequence-constructor; any literal result element
Attributes¶
select?
- expression
- The expression to be evaluated by the instruction may be defined either by a
select
attribute, or by an enclosed sequence constructor. rollback-output?
- boolean
- The value
no
is used to relax the requirement to recover result trees when failures occur in the course of evaluating thexsl:try
instruction. The default isyes
. (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.
Details¶
It is possible to have more than one xsl:catch
within an xsl:try
; the first one that matches the error is used.
Within the xsl:catch
, a number of variables are available in the namespace http://www.w3.org/2005/xqt-errors
:
err:code
- the error code as a QNameerr: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 occurrederr:line-number
- the line-number of the source stylesheet where the error occurrederr:column-number
- for Saxon this will generally be unknown (-1)
The error can be re-thrown by using the error()
function.
Examples¶
Example 1¶
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>
Example 2¶
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>