Torsten Weigert: xsl:result-document auf fuer nicht xml dateien

Hallo,

kann mir jemand weiterhelfen, ob man es einrichten koennte, dass ein XSLT2.0 Parser (Saxon9) nicht nur xml oder text Dateien schreibt, sondern auch andere Dateiformate einfach kopiert von Order a nach Ordner b. Ich habe mir die Saxon-Extensions einmal angeschaut, konnte aber nichts entsprechendes finden. Bei Cocoon gibt es ja einen Zip Transformer, allerdings erstellt er mir dann alle Dateien in einer Zip, diese wuerde in meinem Fall zu gross sein. Deshalb suche ich nach etwas

<xsl:copy-file from=".." to="..."/>

Hat da jemand schon einmal Erfahrungen gemacht - die Coconn writer sind da unzuverlässig. Es muesste aber aus dem Parser heraus geschehen, da die Dateien dynamisch durch den Parser bestimmt werden (mnache werden neu erstellt, andere nicht xml daten einfach nur kopiert.)

Ware dankbar fuer Hilfe.

  1. Hallo,

    meines Wissens kann das Saxon nicht direkt - was allerdings möglich wäre, wäre das einfach in Java zu implementieren und mit dem XSLT dann darauf zuzugreifen:

    package sonstwas;  
      
    import net.sf.saxon.trans.XPathException;  
      
    public class FileUtils {  
      public static boolean copyFile (String from, String to) throws XPathException {  
        // Hier die Dateien kopieren und z.B. true zurückgeben  
        // Bei Bedarf einfch eine new XPathException (message) werfen.  
      }  
    }
    

    Im XSLT kannst Du dann machen:

    <xsl:stylesheet ... xmlns:fileutils="java:sonstwas.FileUtils" exclude-result-prefixes="fileutils">  
      
    ...  
      
    <xsl:if test="fileutils.copyFile ($von, $nach)">  
      <!-- erfolgreich kopiert -->  
    </xsl:if>
    

    Beachte jedoch, dass XSLT eine funktionale Sprache ist, d.h. die Aufrufreihenfolge der Java-Methode nicht garantiert werden kann. Zudem muss die Klasse im Classpath liegen, damit das funktioniert.

    Viele Grüße,
    Christian

    1. Christian,

      vielen Dank fuer deine Antwort.

      Gibt es so ein package vielleicht schon in der standard lib von sun java jdk 1.5

      Ich taste mich gerade erst langsam an Java heran und muesste auch noch einmal dass cocoon servlet neu erstellen (schauder)?

      Gruss, Torsten

      1. Hallo,

        Gibt es so ein package vielleicht schon in der standard lib von sun java jdk 1.5

        Eines, das so direkt von Saxon als statische Methode nutzbar ist: Nein.

        Ich taste mich gerade erst langsam an Java heran und muesste auch noch einmal dass cocoon servlet neu erstellen (schauder)?

        Das Servlet nicht, nein. Es würde vollkommen ausreichen wenn Du die *zusätzliche* kompilierte Datei in den Classpath legst, damit sie von Saxon gefunden wird. Wenn Du allerdings noch gar keine Ahnung von Java hast, wird das wohl schwierig werden.

        Viele Grüße,
        Christian

        1. Na ja,

          ich werde es einfach wohl einfach mal den anderen source packages hinzufuegen und schauen ob die lib nach dem build vorhanden ist und schauen, ob die java function dann zur verfuegung steht ;-)

          Gruss, T.