Comment puis-je lancer une exception de XSLT? [fermé]
Je veux lancer une exception si une balise ne contient pas un attribut.
3 réponses
En plus de la réponse correcte à l'aide de <xsl:message terminate="yes"/>
:
En XSLT 3.0 on peut utiliser les nouvelles instructions
<xsl:try ...>
et<xsl:catch ...>
: http://www.w3.org/TR/xslt-30/#try-catchDans 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>
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.
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)..