如何从 XSLT 引发异常?
我想在一个标签不包含属性时引发异常。
使用 xsl:message
with 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 并终止处理。
顺便说一句。这在 Schematron 验证中被大量使用。
除了使用<xsl:message terminate=“yes”/>
的正确答案之外:
在 XSLT 3.0 中,可以使用新的指令和:http://www.w3.org/TR/xslt-30/#try-catch<xsl:try ...>
<xsl: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>