xsl:message

(Auszug aus "XSLT 2.0 & XPath 2.0" von Frank Bongers, Kapitel 6.)

A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

 

Die Instruktion xsl:message wird im Wesentlichen für Debugging-Zwecke benötigt oder bei auftretenden Fehlern parallel oder alternativ zur Erzeugung eines Ergebnisdokuments eine Nachricht auszugeben. Optional kann die Weiterverarbeitung des Stylesheets gestoppt werden.

Klassifizierung Instruktion
Funktionsgruppe Ausgabe von Meldungen während der Verarbeitung
Einführung XSLT 1.0

Position im Stylesheet und erlaubte Inhalte:

xsl:message darf als Instruktion ohne Einschränkung an jeder Stelle innerhalb von Template-Regeln auftreten. Das Element enthält optional einen Templatebody in Form eines Sequenzkonstruktors. Als Inhalt sind Literal Result Elements und XSLT-Instruktionen erlaubt.

Attribute:

Für das Element gelten die Standardattribute. Die Instruktion xsl:message besitzt dazu ein optionales Attribut terminate. Mit XSLT 2.0 wurde ein zweites optionales Attribut select eingeführt.

select

Wert

xpath-expression

Verwendung

Optional

Einführung

XSLT 2.0

Das select-Attribut bestimmt, alternativ oder zusätzlich zum in der Instruktion erlaubten Sequenzkonstruktor, den Inhalt der auszugebenden Mitteilung.

Hinweis: Das Attribut existiert nicht in XSLT 1.0.

terminate

Wert

{yes | no} (seit XSLT 2.0 als AVT)

Verwendung

Optional

Einführung

XSLT 1.0

Das terminate-Attribut bestimmt das Abbruchverhalten des XSLT-Prozessors in Zusammenhang mit einer wegen eines aufgetretenen Fehlers ausgegebenen Message. Defaultwert ist "no". Ist das Attribut auf "yes" gesetzt, so wird die Verarbeitung des Stylesheets nach Ausgabe der Meldung beendet. Ist der Wert auf "no" gesetzt, wird die Meldung ausgegeben und anschließend mit der Verarbeitung fortgefahren.

Hinweis: Der Attributwert kann ab XSLT 2.0 zur Laufzeit auch durch ein Attributwert-Template bestimmt werden.

Verwendungszweck:

Die Anweisung xsl:message erzeugt bei ihrer Instanziierung (also in der Regel bei Auftreten eines Fehlers) einen sekundä­ren Dokumentknoten (Anmerkung: In XSLT 1.0 wird ein Textknoten erzeugt und zurückgegeben, ansonsten gleicht das Verfahren dem beschriebenen). Dessen Inhalte werden durch den Sequenzkonstruk­tor innerhalb der Instruktion bestimmt. Die auszugebenden Inhalte können dort literal enthalten sein oder zur Laufzeit durch die Auswertung beliebiger, sich dort befind­licher XSLT-Instruktionen erzeugt werden.

Ist ein select-Attribut vorhanden, so wird der in ihm enthaltene XPath-Aus­druck ausgewertet und die so erzeugte Sequenz vor derjenigen eingefügt, die sich aus dem Sequenzkonstruktor ergibt. Die Wirkung des select-Attributs entspricht somit dem Einfügen einer xsl:copy-Instruktion mit identischem select-Attributwert am Anfang des Sequenz­konstruktors:

<xsl:message select="//meldung" terminate="no"/>

ist demnach wirkungsgleich mit:

<xsl:message terminate="no">
  <xsl:copy select="//meldung"/>
</xsl:message>

Der durch xsl:message erzeugte Dokumentknoten besitzt keinen URI und darf deshalb nicht als Ergebnisbaum (result tree) betrachtet werden.

Auf diesem Wege können relevante Informationen über die Fehlerursache aus­gegeben werden. Eine Fehlermeldung, wie sie xsl:message erzeugt, gelangt nicht in den Ergebnisbaum, auch dann nicht, falls – terminate="no" – ein sol­cher erzeugt wird. Vielmehr wird sie auf anderem, applikationsabhängigem Wege ausgegeben: In der Regel wird dies in Form einer entsprechenden Kon­solenmeldung erfolgen (denkbar ist auch ein Popup-Fenster oder ein Eintrag in eine Log-Datei).

Hinweis: Das Verhalten von xsl:message ist gegenüber anderen XSLT-Instruktionen insofern nicht konsistent, als dass in allen anderen Fällen ein select-Attribut und ein Sequenzkonstruktor im Elementinneren sich gegenseitig ausschließen. Dies gilt in dieser Form für xsl:attribute, xsl:comment, xsl:param, xsl:namespace, xsl:perform-sort, xsl:processing-instruction, xsl:sort, xsl:value-of, xsl:variable und xsl:with-param.

Beispiel – Ausgabe einer Message und Stopp der Verarbeitung:

<xsl:template match="adressen">
  <xsl:for-each select="adresse">
    <b>Name: </b><xsl:value-of select="name" /><br />
    <b>eMail: </b>
    <xsl:if test="email=''">
      <xsl:message terminate="yes">E-Mail-Adresse fehlt für <xsl:value-of select="name"/>!</xsl:message>
    </xsl:if>
    <xsl:value-of select="email" /><br />
    <hr />
  </xsl:for-each>
</xsl:template>

Aus einer Adressenliste werden Name und E-Mail-Adresse ausgegeben. Fehlt zu einem Namen die zugehörige E-Mail-Adresse, so bricht xsl:message aufgrund des gesetzten terminate="yes" die Verarbeitung mit einer Fehlermeldung ab und erzeugt (in Form eines sekundären Dokuments) eine Textmeldung mit dem entspre­chenden Namen. Ein Ergebnisdokument wird in diesem Fall nicht erzeugt.

Elementdefinition:

XSLT 1.0:

<!-- Category: instruction -->
<xsl:message 
     terminate = "yes" | "no">

     <!-- Content: template -->
</xsl:message>

XSLT 2.0:

<!-- Category: instruction -->
<xsl:message
     select? = expression 
     terminate? = { "yes" | "no" }>

     <!-- Content: sequence-constructor -->
</xsl:message>

Hinweis: Das terminate-Attribut ist ab XSLT 2.0 ein AVT.

   

<< zurück vor >>
Tipp der data2type-Redaktion:
Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © Galileo Press, Bonn 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT 2.0 & XPath 2.0 ― Das umfassende Handbuch" denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Galileo Press, Rheinwerkallee 4, 53227 Bonn