29

1つのタグに属性が含まれていない場合、例外をスローしたいと思います。

4

3 に答える 3

33

xsl:messagewithterminate="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検証で頻繁に使用されます。

于 2012-11-23T07:38:16.517 に答える
24

使用の正解に加えて<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()て処理を終了することもできます。

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>
于 2012-11-23T13:57:55.283 に答える
2

XSLT は検証用ではありません。それは変換のためのものです..(XSLTはEXtensible Stylesheet Language Transformationの略です)

階層を検証し (それが要件です)、データを検証する場合は、XSD を使用してください。拡張可能なスキーマ定義..

ここにXSDを学ぶためのリンクリファレンスがあります

XML は、ホスト コード (C#、Java など) によって XSD に対して検証する必要があります。検証により、一連の結果が返されます。検証エラーによる成功または失敗 (存在する場合)。

于 2012-11-23T06:17:46.477 に答える