Ich versuche, xsl: message in Java einzufangen, wenn ich meine Transformation anrufe. Unten ist ein Ausschnitt meines Codes.
%Vor%Leider funktioniert das nicht.
Gibt es einen besseren Weg?
Vielen Dank im Voraus!
Wenn Sie Saxon verwenden, müssen Sie möglicherweise Setzen Sie den Nachrichtensender mit setMessageEmitter () .
public void setMessageEmitter(Receiver receiver)
Stellen Sie den Empfänger für die xsl: message-Ausgabe ein.
Aktuelle Versionen der JAXP-Schnittstelle geben an, dass standardmäßig die Ausgabe von
xsl:message
wird an die registrierter ErrorListener. Saxon tut es Implementieren Sie diese Konvention nicht. Stattdessen wird die Ausgabe an a gesendet Standardnachrichtensender, der a leicht angepasste Umsetzung von die Standard-Saxon-Emitter-Schnittstelle.Über diese Schnittstelle kann die Art und Weise geändert werden, in der Saxon-Ausgänge ausgegeben werden
xsl:message
output.
Michael Kay hat erklärt, warum Saxon laut JAXP nicht xsl:message
ausgibt Schnittstelle, und hat zwei Optionen vorgeschlagen, um die Ausgabe zu erhalten :
ErrorListener
war etwas, das war relativ spät in JAXP eingeführt Bühne (eine von vielen bedauerlich Gelegenheiten, bei denen die Spezifikation geändert wurde einseitig, um den Xalan zu entsprechen Implementierung), und entschied ich nicht zu Implementieren Sie diese Änderung als Standard Verhalten, weil es gewesen wäre störend für bestehende Anwendungen .In Saxon ist
xsl:message
output gerichtet auf einen Empfänger, den Sie können Nominiere zum Transformer:
((net.sf.saxon.Controller)transformer).setMessageEmitter(....)
Wenn Sie dem JAXP-Modell folgen möchten Senden der Ausgabe an die ErrorListener, Sie können ein Empfänger, der dies tut:
((net.sf.saxon.Controller)transformer).setMessageEmitter(new net.sf.saxon.event.MessageWarner())