XSL / Die XSLT - Struktur / xsl:try / xsl:catch
![]() |
![]() |
➪ Wie in diversen Programmier-Sprachen üblich, ist nun auch in XSLT 3.0 mit xsl:try/xsl:catch ein leistungsfähiges Exception-Handling verfügbar, mit dem diverse Fehler aufgefangen werden können.
Siehe auch
<!-- Category: instruction -->
<xsl:try
select? = expression
rollback-output? = boolean >
<!-- Content: (sequence-constructor,
xsl:catch, (xsl:catch | xsl:fallback)*) -->
</xsl:try>
<xsl:catch
errors? = tokens
select? = expression >
<!-- Content: sequence-constructor -->
</xsl:catch>
Das Prinzip von xsl:try/xsl:catch ist einfach. In xsl:try wird eine Anweisung definiert. Ist deren Ausführung nicht möglich (wie zum Beispiel in der Zeile <xsl:value-of select="1 div $v0"/>), so entsteht ein Fehler. Dieser kann mit xsl:catch aufgefangen werden. Interessant ist dabei, dass Sie für unterschiedliche Fehlerarten individuelle "Fehlerfänger" bereitstellen können, die vom jeweiligen Fehlercode abhängen. Bei einer Durch-Null-Division entsteht dabei ein Fehler vom Typ err:FOAR0001.
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:err="http://www.w3.org/2005/xqt-errors"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs err"
version="3.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<ergebnis>
<xsl:try>
<xsl:variable
name="v0"
select="xs:integer('0')"/>
<xsl:value-of select="1 div $v0"/>
<xsl:catch errors="err:FOAR0001">
<xsl:message>Durch Null Division</xsl:message>
</xsl:catch>
<xsl:catch errors="*">
<xsl:message>
<xsl:value-of
select="concat('Code : ',
$err:code)"/>
</xsl:message>
<xsl:message>
<xsl:value-of
select="concat('Description : ',
$err:description)"/>
</xsl:message>
<xsl:message>
<xsl:value-of
select="concat('Value : ',
$err:value)"/>
</xsl:message>
<xsl:message>
<xsl:value-of
select="concat('Module : ',
$err:module)"/>
</xsl:message>
<xsl:message>
<xsl:value-of
select="concat('line-number : ',
$err:line-number)"/>
</xsl:message>
<xsl:message>
<xsl:value-of
select="concat('column-number: ',
$err:column-number)"/>
</xsl:message>
</xsl:catch>
</xsl:try>
</ergebnis>
</xsl:template>
</xsl:stylesheet>
Auf der Webseite https://www.w3.org/2005/xqt-errors/ gibt es eine Liste von Zugriffsmöglichkeiten auf das Fehler-Objekt.
err:code | Der Errorcode |
err:description | Eine freie Fehlerbeschreibung |
err:value | Ein Wert, der mit dem Fehler assoziiert wird |
err:module | Die URI des Stylesheets, in dem der Fehler auftrat |
err:line-number | Die Zeilennummer der Anweisung, wo der Fehler auftrat |
err:column-number | Die Spaltennummer der Anweisung, wo der Fehler auftrat |
Ist der Fehlercode err:FOAR0001, dann wird die oben beschriebene Fehlermeldung ausgegeben:
Durch Null Division
Ist der Fehlerfänger errors="err:FOAR0001> nicht definiert, dann greift der Default-Fehlerfänger <xsl:catch errors="*"> ein. Die Ausgabe der Fehlermeldungen ist prozessorabhängig.
Processor has sent a message from line 210
and position 7: Code : err:FOAR0001;
Processor has sent a message from line 211
and position 7: Description : Division by zero.
Processor has sent a message from line 212
and position 7: Value : ;
Processor has sent a message from line 213
and position 7: Module : file:///C:/wg/test.xsl;
Processor has sent a message from line 214
and position 7: line-number : 199;
Processor has sent a message from line 215
and position 7: column-number: 6;
Siehe auch xsl:import-schema.
wg / 24. September 2020
Fragen? Anmerkungen? Tipps?
Bitte nehmen Sie Kontakt zu mir auf.
V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn
☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de