Comment puis-je lancer une exception de XSLT? [fermé]

Je veux lancer une exception si une balise ne contient pas un attribut.

22
demandé sur Flynn1179 2012-11-23 09:51:53

3 réponses

En plus de la réponse correcte à l'aide de <xsl:message terminate="yes"/>:

  1. En XSLT 3.0 on peut utiliser les nouvelles instructions <xsl:try ...> et <xsl:catch ...>: http://www.w3.org/TR/xslt-30/#try-catch

  2. Dans XSLT 2.0 on peut également utiliser la fonction standart XPath error() pour mettre fin au traitement.

Voici un exemple d'utilisation de xsl:try et 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>
18
répondu Dimitre Novatchev 2012-11-23 15:49:03

Utiliser xsl:message avec terminate="yes" pour obtenir un effet similaire à lancer une exception:

<xsl:if test="(your condition)">
   <xsl:message terminate="yes">ERROR: Missing attribute XYZ under
      <xsl:value-of select="local-name()"/> !</xsl:message>
</xsl:if>

Cela provoque l'envoi du message à STDERR et la fin du traitement.

BTW. ceci est fortement utilisé dans Schematron validation.

22
répondu Petr Kozelka 2016-09-24 18:07:45

XSLT n'est pas destiné à la validation! il est destiné à la transformation .. (bien XSLT signifie EXtensible Stylesheet Language Transformation)

Si vous voulez valider la hiérarchie (c'est votre exigence) et valider les données .. alors allez pour XSD! Définition De Schéma Extensible..

Voici une référence de lien à apprendre XSD

XML doit être validé par rapport au XSD par le code hôte (C#, Java, etc.) la validation renvoie un ensemble de résultats. Succès ou échec avec les erreurs de validation (s'il existe)..

1
répondu InfantPro'Aravind' 2012-11-23 07:31:13