XSL-Übersicht / xsl:try/xsl:catch

xsl:try/xsl:catch

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.

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;

wg / 8. Juli 2018



Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf.






Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/XSL301.html