# saxon:try

The `saxon:try` instruction evaluates an XPath expression in its `select` attribute, or a sequence of child instructions. If any dynamic error occurs while performing this evaluation, the error may be caught by an `xsl:catch` instruction that is written as a child of the `xsl:try`. For example, the following code catches a failure occurring while executing the `document()` function, and returns an `<error-document/>` element if this occurs.

    <xsl:variable name="doc" as="document-node()">
      <saxon:try select="document($input-uri)">
        <saxon:catch errors="*">
          <xsl:document>
            <error-document/>
          </xsl:document>
        </saxon:catch>
      </saxon:try>
    </xsl:variable>

The `saxon:try` element must contain at least one `saxon:catch` child, and it may contain several. Each one specifies which errors it is intended to catch in its `errors` attribute; the value `*` catches all errors. The first `saxon:catch` to match the error code is the one that is evaluated. The `saxon:catch` children must come after all other children, with the exception of any `xsl:fallback` children (which can be included to define fallback behaviour by processors that do not recognize the `saxon:try` instruction.

The `saxon:try` element may have either a `select` attribute, or a sequence of child instructions (preceding the first `xsl:catch`); it must not have both.

`saxon:try` is available in Saxon-EE only

See also saxon:catch.

Next