如何从XSLT中抛出异常?

时间:2012-11-23 05:51:53

标签: java xml xslt

如果一个标签不包含属性,我想抛出异常。

3 个答案:

答案 0 :(得分:25)

使用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验证中被大量使用。

答案 1 :(得分:19)

除了使用<xsl:message terminate="yes"/>的正确答案:

  1. 在XSLT 3.0中,可以使用新说明<xsl:try ...><xsl:catch ...>http://www.w3.org/TR/xslt-30/#try-catch

  2. 在XSLT 2.0中,还可以使用标准XPath函数 error() 来终止处理。

  3. 以下是使用xsl:tryxsl: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 :(得分:1)

XSLT不用于验证!它适用于转换..(以及XSLT代表可扩展样式表语言转换)

如果您想验证层次结构(这是您的要求)并验证数据..那么请转到XSD!可扩展的模式定义..

这是指向learn XSD

的链接引用

XML必须通过主机代码(C#,Java等)对XSD进行验证。验证返回结果集。验证错误成功或失败(如果存在)..