Hi,
ich bin mit dem Thema XML via XSLT nach RTF generieren zurzeit beschäftigt. Dazu habe ich jetzt eine kostenlose Schnittstelle von Altova ausgegraben. Dazu meine Fragen:
erste Frage: Ich generiere mittels XSLT RTF-Dokumente auf Basis eines Altova Stylevision-Stylesheets von XML nach RTF. Gibt es hier Alternativen zur XSLT-Erzeugung von RTF?
zweite Frage: Für den Aufruf gibt es von Altova einen kostenloses Programm (AltovaXML.exe, es handelt sich um einen COM-Server, der natürlich nur unter Windows läuft), das auch eine Java-Implementierung besitzt. Bei den Java-Klassen wird letztendlich allerdings auch nur der COM-Server aufgerufen.
Mangels Alternativen habe ich jetzt folgendes Implementiert:
try {
IAltovaXMLFactory objXmlApp = AltovaXMLFactory.getInstance();
if (objXmlApp != null){
IXSLT ixslt = objXmlApp.getXSLT2Instance();
ixslt.setInputXMLFileName(strWorkDataFileOut);
ixslt.setXSLTFileName(strRtfStylesheet);
String resultString = ixslt.executeAndGetResultAsString();
// Instanzzeiger wieder freigeben
ixslt.releaseInstance();
objXmlApp.releaseInstance();
if (resultString == null ) {
log.error("XSLT Fehler : " + ixslt.getLastErrorMessage());
}
else{
PrintWriter output =
new PrintWriter(
new OutputStreamWriter(
new FileOutputStream(strResultTransformFileRtfOut),
"UTF-8"));
output.write(resultString);
output.close();
}
}
else
log.error("Fehler: AltovaXML-COM-Server konnte nicht instanziert werden.");
}
catch (Exception e ) {
log.error("Fehler : " + e.getMessage());
}
Das funktioniert auch, allerdings genau einmal. Wird die Routine ein weiteres mal aufgerufen, gibt es eine Fehlermeldung, dass der COM-Server nicht instanziert werden kann. (Im Task-Manager gibt es dann auch tatsächlich noch eine AltovaXML.exe als Prozess). Anscheinend funktionieren die Aufrufe .releaseInstance() nicht sauber. Hat da einer eine Idee? (Alternativ habe ich schon den den AltovaXML.exe-Aufruf als cmd-call mit entsprechenden Ein- und Ausgabeparametern umgesetzt. Das funktioniert dann. Allerdings würde ich lieber die Java-Klassen verwenden.)
dritte Frage: Sind mit Altova Stylesheet erzeugten XSLT-RTF-Transformationsdateien proprietär oder können auch andere Parser, wie SAX, diese Dateien ausführen und damit die entsprechenden RTF-Ausgaben erzeugen.
Danke Lutz
ich bin mit dem Thema XML via XSLT nach RTF generieren zurzeit beschäftigt. Dazu habe ich jetzt eine kostenlose Schnittstelle von Altova ausgegraben. Dazu meine Fragen:
erste Frage: Ich generiere mittels XSLT RTF-Dokumente auf Basis eines Altova Stylevision-Stylesheets von XML nach RTF. Gibt es hier Alternativen zur XSLT-Erzeugung von RTF?
zweite Frage: Für den Aufruf gibt es von Altova einen kostenloses Programm (AltovaXML.exe, es handelt sich um einen COM-Server, der natürlich nur unter Windows läuft), das auch eine Java-Implementierung besitzt. Bei den Java-Klassen wird letztendlich allerdings auch nur der COM-Server aufgerufen.
Mangels Alternativen habe ich jetzt folgendes Implementiert:
try {
IAltovaXMLFactory objXmlApp = AltovaXMLFactory.getInstance();
if (objXmlApp != null){
IXSLT ixslt = objXmlApp.getXSLT2Instance();
ixslt.setInputXMLFileName(strWorkDataFileOut);
ixslt.setXSLTFileName(strRtfStylesheet);
String resultString = ixslt.executeAndGetResultAsString();
// Instanzzeiger wieder freigeben
ixslt.releaseInstance();
objXmlApp.releaseInstance();
if (resultString == null ) {
log.error("XSLT Fehler : " + ixslt.getLastErrorMessage());
}
else{
PrintWriter output =
new PrintWriter(
new OutputStreamWriter(
new FileOutputStream(strResultTransformFileRtfOut),
"UTF-8"));
output.write(resultString);
output.close();
}
}
else
log.error("Fehler: AltovaXML-COM-Server konnte nicht instanziert werden.");
}
catch (Exception e ) {
log.error("Fehler : " + e.getMessage());
}
Das funktioniert auch, allerdings genau einmal. Wird die Routine ein weiteres mal aufgerufen, gibt es eine Fehlermeldung, dass der COM-Server nicht instanziert werden kann. (Im Task-Manager gibt es dann auch tatsächlich noch eine AltovaXML.exe als Prozess). Anscheinend funktionieren die Aufrufe .releaseInstance() nicht sauber. Hat da einer eine Idee? (Alternativ habe ich schon den den AltovaXML.exe-Aufruf als cmd-call mit entsprechenden Ein- und Ausgabeparametern umgesetzt. Das funktioniert dann. Allerdings würde ich lieber die Java-Klassen verwenden.)
dritte Frage: Sind mit Altova Stylesheet erzeugten XSLT-RTF-Transformationsdateien proprietär oder können auch andere Parser, wie SAX, diese Dateien ausführen und damit die entsprechenden RTF-Ausgaben erzeugen.
Danke Lutz