Подтвердить что ты не робот

Как я могу исключить исключение из XSLT?

Я хочу создать исключение, если один тег не содержит атрибута.

4b9b3361

Ответ 1

В дополнение к правильному ответу на использование <xsl:message terminate="yes"/>:

  • В XSLT 3.0 можно использовать новые инструкции <xsl:try ...> и <xsl:catch ...>: http://www.w3.org/TR/xslt-30/#try-catch

  • В XSLT 2.0 также можно использовать стандартную функцию XPath error(), чтобы завершить обработку.

Ниже приведен пример использования xsl:try и xsl:catch:

<xsl:result-document href="out.xml">
  <xsl:variable name="result">
    <xsl:call-template name="construct-output"/>
  </xsl:variable>
  <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>
</xsl:result-document>

Ответ 2

Используйте xsl:message с помощью terminate="yes", чтобы добиться эффекта, подобного бросанию исключения:

<xsl:if test="(your condition)">
   <xsl:message terminate="yes">ERROR: Missing attribute XYZ under
      <xsl:value-of select="local-name()"/> !</xsl:message>
</xsl:if>

Это приводит к отправке сообщения в STDERR и завершению обработки.

BTW. это сильно используется в Schematron.

Ответ 3

XSLT не предназначен для проверки! он предназначен для преобразования.. (хорошо XSLT означает преобразование языка с расширяемым стилем)

Если вы хотите проверить иерархию (это ваше требование) и проверить данные... затем перейдите на XSD! Расширяемое определение схемы.

здесь ссылка на ссылку узнать XSD

XML должен быть проверен на соответствие XSD кодом хоста (С#, Java и т.д.). Validation возвращает набор результатов. Успех или неудача с ошибками проверки (если есть)..