如果元素不存在,是否可以强制 XSLT 转换失败?

Is it possible to force XSLT transformation to fail if an element does not exist?

我们正在使用 XSLT 样式表从大型 XML 文件中提取数据并将其写入 CSV 文件。

将值写入 CSV 的代码通常如下所示:

...
<xsl:value-of select="$quote"/>
<xsl:value-of select="pbs:code"/>
<xsl:value-of select="$quote"/>
<xsl:value-of select="$delimiter"/>
...

如果输入 XML 不是预期的格式,我真的希望转换失败。 如果缺少元素(即样式表期望的元素),是否有任何方法可以强制转换失败?

检查元素是否存在有两种可能性:

  • 一个是<xsl:fallback>检查XSL中的元素是否无效(对版本检查有用)
  • 另一个是<xsl:message>检查XML中的元素是否无效

在您的情况下,第二个变体将是最佳选择。
所以将 <xsl:message> 与属性 terminate="yes" 一起使用,如下所示:

...
<xsl:if test="not($qoute)">
  <xsl:message terminate="yes">
    ERROR: $quote is not present!
  </xsl:message>
</xsl:if>
<xsl:value-of select="$quote"/>
...

如果 $quote 不是有效元素,这将中断 XSLT 转换并给出错误消息。