Dietmar: XSL Rueckgabewert

Hallo,

gibt es eine Moeglichkeit per XSL Script einen Rueckgabewert zurueckzugeben, den man anschliessend per Java auswerten kann.
Da ich das Ergebnis der Konvertierung direkt in ein File schreiben lasse, moechte ich dieses nicht erst wieder oeffnen, um den Wert abzufragen. (Der konvertierte Inhalt ist uninteressant, falls gewisse Bedingungen vorliegen)

Oder kann man evtl. in xsl eine custom Exception werfen, welche man ausserhalb abfangen und auswerten kann.

Bisher bin ich nur auf xsl:message gestossen, welches aber nur eine Meldung ausgibt.

Dietmar

  1. Hallo,

    gibt es eine Moeglichkeit per XSL Script einen Rueckgabewert zurueckzugeben, den man anschliessend per Java auswerten kann.
    Da ich das Ergebnis der Konvertierung direkt in ein File schreiben lasse, moechte ich dieses nicht erst wieder oeffnen, um den Wert abzufragen. (Der konvertierte Inhalt ist uninteressant, falls gewisse Bedingungen vorliegen)

    Oder kann man evtl. in xsl eine custom Exception werfen, welche man ausserhalb abfangen und auswerten kann.

    Bisher bin ich nur auf xsl:message gestossen, welches aber nur eine Meldung ausgibt.

    Im XSLT 1.0 ist xsl:message relativ begrenzt. In XSLT 2.0 (da funktioniert xsl:message auf ähnliche Weise wie xsl:result-dokument*) bekommt es mit dem select-Attribut mehr Möglichkeiten.
    Wie das Ergebnis von xsl:message dann aber ausgegeben wird, * =  hängt von der Implementierung ab. Die Spez. schlägt hier tatsächlich nur etwas vor (alert-Box bzw. einen Eintrag in einer Logdatei).

    Viele XSLT-Prozessoren - vor allem die in Java - haben eigene Erweiterungen, die sind dann in der jeweiligen Dokumentation zu finden. Ob diese aber ermöglichen aus dem Transformationsprozess heraus etwas auszulesen?
    Auf dem "normalen" Weg ginge das nur, wenn du deine eigene Java-Anwendung schreibst und darin dann die Transformation mitverfolgst und auf Ereignisse reagierst.

    Grüße
    Thomas

    1. Hallo,

      Im XSLT 1.0 ist xsl:message relativ begrenzt. In XSLT 2.0 (da funktioniert xsl:message auf ähnliche Weise wie xsl:result-dokument*) bekommt es mit dem select-Attribut mehr Möglichkeiten.
      Wie das Ergebnis von xsl:message dann aber ausgegeben wird, * =  hängt von der Implementierung ab. Die Spez. schlägt hier tatsächlich nur etwas vor (alert-Box bzw. einen Eintrag in einer Logdatei).

      Viele XSLT-Prozessoren - vor allem die in Java - haben eigene Erweiterungen, die sind dann in der jeweiligen Dokumentation zu finden. Ob diese aber ermöglichen aus dem Transformationsprozess heraus etwas auszulesen?
      Auf dem "normalen" Weg ginge das nur, wenn du deine eigene Java-Anwendung schreibst und darin dann die Transformation mitverfolgst und auf Ereignisse reagierst.

      Aus der laufenden Transformation brauche ich nicht zugreifen. Allerdings möchte ich, sobald die Transformatin fertig ist, entscheiden können, ob Fall a) oder Fall b) vorliegt. Dies geht per Rückgabewert (setProperty und setOutputParameter scheinen mir laut Beschreibung nicht dafür geeignet) oder per Exception (bei einem SAX-Parser z.B. kann ich eine CustomAbortException werfen, welche den Pars-Vorgang abbricht und welche ich außerhalb abfangen kann.)
      Ich muss mir den Xalan mal genauer ansehen, ob man so etwas wie einen Message-Handler schreiben kann, der die xsl:message auswertet.

      Danke für die Infos
      Dietmar

      1. Hallo,

        Ich muss mir den Xalan mal genauer ansehen, ob man so etwas wie einen Message-Handler schreiben kann, der die xsl:message auswertet.

        == "die Transformation mitverfolgst und auf Ereignisse reagierst" ;-)

        Da gäbe es: TransformerImpl.getMsgMgr()  vom
        http://xml.apache.org/xalan-j/apidocs/org/apache/xalan/transformer/MsgMgr.html
        Oder es wäre möglich mit einem TraceManager.

        Grüße
        Thomas

        1. Hallo,

          Da gäbe es: TransformerImpl.getMsgMgr()  vom
          http://xml.apache.org/xalan-j/apidocs/org/apache/xalan/transformer/MsgMgr.html
          Oder es wäre möglich mit einem TraceManager.

          Habe mir den Source-Code von Xalan downgeloaded und in der Implementierung nachgesehen.
          Es wird eine TransformerException geworfen, welche sprachabhängig z. B. für DE den Text 'Stylesheet führte zu Beendigung' enthält. Somit kann ich die Exception abfangen und im ex.getMessage den Text suchen. Ist nicht elegant (da locale-abhängig), aber funktioniert.
          Sauberer ist es vermutlich einen eigenen MsgMgr zu implementieren, aber dazu müsste ich soviel ich gesehen habe dem Transformer beibringen, dass er meine eigene ElemMessage-Ableitung benutzt.

          Vielen Dank für die Hilfe
          Beste Grüße
          Dietmar