Перейти к содержанию

xsl:try

В сочетании с xsl:catch инструкция xsl:try позволяет восстанавливать динамические ошибки, возникающие в выражении, которое она оборачивает.

Доступно в XSLT 3.0. Начиная с версии Saxon 9.8, доступна во всех редакциях. Реализована в Saxon-PE и Saxon-EE начиная с Saxon 9.6.

  • Категория: инструкция
  • Содержимое: ( sequence-constructor , xsl:catch, ( xsl:catch | xsl:fallback )* )
  • Допустимые родительские элементы: любой элемент XSLT, модель содержимого которого - sequence-constructor; любой литеральный элемент результата

Атрибуты

select?
expression
Выражение, которое должно быть оценено инструкцией, может быть определено либо атрибутом select, либо вложенным конструктором последовательности.
rollback-output?
boolean
Значение no используется для ослабления требования восстанавливать деревья результатов, когда происходят сбои в процессе оценки инструкции xsl:try. По умолчанию используется значение yes. (Этот атрибут не имел никакого значения до версии Saxon 9.9).

Заметки по реализации Saxon

Saxon 9.9 больше не игнорирует значение атрибута rollback-output. Если установлено значение "no", то при оценке инструкции в режиме "push" вывод xsl:try не буферизируется, а записывается непосредственно в место назначения результата. Если возникает динамическая ошибка, то соответствующая xsl:catch действует только в том случае, если вывод еще не был записан в это место назначения.

Подробности

Можно иметь более одного xsl:catch внутри xsl:try; используется первый, который соответствует ошибке.

Внутри xsl:catch доступен ряд переменных в пространстве имен http://www.w3.org/2005/xqt-errors:

  • err:code - код ошибки в виде QName
  • err:description - описание ошибки (сообщение об ошибке)
  • err:value - объект ошибки (если доступен)
  • err:module - URI модуля таблицы стилей, в котором произошла ошибка
  • err:line-number - номер строки исходной таблицы стилей, в которой произошла ошибка
  • err:column-number - для Saxon это обычно будет неизвестно (-1).

Ошибка может быть повторно отброшена с помощью функции error().

Примеры

Пример 1

В следующем примере показано восстановление после ошибки при оценке выражения XPath (в данном случае деление на ноль):

1
2
3
<xsl:try select="salary div length-of-service">
    <xsl:catch errors="err:FAOR0001" select="()"/>
</xsl:try>

Пример 2

Следующий пример показывает, как восстановиться после ошибки при оценке последовательности инструкций XSLT (в данном случае ошибка валидации):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<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>

Ссылки

См. также

Комментарии