首页 > 解决方案 > 关于 xsl:try xsl:catch 中的错误信息的问题

问题描述

代码来自:try-catch-examples

<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>

$err:code,是什么语法$err:description?" $err" 似乎是一个变量,为什么后面是冒号?它是什么类型的?是什么类型codedescription?一个关键字符串?

标签: xsltxslt-3.0

解决方案


$err:code, $err:description 的语法是什么?"$err" 似乎是一个变量,为什么后面跟一个冒号?它是什么类型的?什么类型的代码,描述?一个关键字符串?

$somePrefix:localName是一个变量引用,其名称属于一个命名空间,并且前缀somePrefix与该命名空间相关联。

在这种特殊情况下,err前缀与标准错误命名空间相关联:http://www.w3.org/2005/xqt-errors

XSLT 3.0 Specification中解释了确切的含义

“在 select 表达式中,或在 xsl:catch 元素包含的序列构造函数中,隐式声明了许多变量,提供有关发生的错误的信息。这些变量的词法范围为 xsl:catch 元素。这些变量都是在标准错误命名空间中,它们的初始化如下表所述:"

在此处输入图像描述

上面引用中的短语:“隐式声明了许多变量xsl:catch”是理解元素中如何捕获错误的关键

这意味着每当在 中捕获错误时xsl:catch,XSLT 处理器本身都会创建这些变量,并将它们提供给程序员以在xsl:catch元素范围内使用。

我们可以说这些变量中的每一个都是一个“ future ”,它可以由 XSLT 处理器创建,充当一个“ promise ”——确切的含义参见: Futures and promises


推荐阅读