Ausgabepfad ermitteln/NW-Pfadproblem bei result-document
sth_Weird
- xsl
Hallo,
Ich stehe vor folgendem Problem (verwende den Saxon 9/Java 1.6 für die Trafo):
In meiner xsl-Trafo erzeuge ich mehrere Ausgabedateien (html-Seiten) mit Hilfe von result-document.
Die Dateien sollen alle im selben Verzeichnis laden, deshalb brauche ich ja eigentlich nur den Namen der Datei anzugeben, dann nimmt er als Basisverzeichnis das "normale" Ausgabeverzeichnis (also das was für "die eine" Ausgabedatei die direkt erzeugt wird verwendet wird). Das result-document sieht so aus:
<xsl:result-document href = "{$tmp}" method = "html">
wobei tmp eine Variable ist deren Name erst im xsl-File gebildet wird (= Wert eines Elements).
Das funktioniert prima, solange ich normale Verzeichnispfade habe, also z.B. C:\temp. Da werden alle result-documents brav ebenfalls in C:\temp\ erzeugt.
Jetzt habe ich aber einen Netzwerkpfad der Form \Homepage.
Und jetzt scheint das mit dem result-document nicht mehr zu funktionieren. Saxon gibt zwar keinen Fehler aus, aber alle Dateien die ich mit dem result-document erstellen will werden nicht mehr erzeugt (ich finde sie weder in \Homepage\ noch sonstwo, da ist nur "die eine" Datei die bei der Trafo direkt erzeugt wird).
ich hab schon probiert file:\\{$tmp} beim result-document dazuzuschreiben weil ich das in nem anderen Forum gesehen hab, aber dann wird alles unter C:\ gespeichert (naja \Homepage\ ist ja eigentlich auch kein Dateipfad).
Mir scheint im Moment die einzige Lösung zu sein, wenn ich irgendwie den Pfad der Ausgabedatei ermitteln könnte. Geht sowas? Mit document-uri krieg ich ja nur den Xml-Pfad aber die liegt ganz woanders.
Jemand ne Idee?
Als Parameter übergeben kann ich den Pfad auch nur ganz schlecht weil die Trafo-Anweisung nicht per Hand sondern über ein allgemeines Script erzeugt wird und das müsste man sonst ändern und Sonderstricke einbauen.
Bin für jeden Tipp dankbar!
thx
sth_Weird
Hallo sth_Weird,
Jetzt habe ich aber einen Netzwerkpfad der Form \Homepage.
Und jetzt scheint das mit dem result-document nicht mehr zu funktionieren.
<xsl:result-document href="file:////NETZWERKPCNAME/verzeichnisname/dateiname.html" method="html">
<!-- ... -->
</xsl:result-document>
funktioniert bei mir mit Saxon B 9.1.0.1.
Grüße,
Thomas
Hallo Thomas,
Danke für die Antwort, leider hilft es mir an dieser Stelle nicht weiter, denn den Pfad habe ich innerhalb der Transformation nicht.
Die Transformation sieht so aus (steht in nem Batchfile):
mit Netzwerkpfad:
(...) net.sf.saxon.Transform -o "\Homepage\unterverz\index_Daten.html" "C:\temp\Xml\Parameter.xml" "C:\temp\Transformation\DatenConverter.xsl"
bzw. (lokaler Pfad):
(...) net.sf.saxon.Transform -o "C:\temp\Test\unterverz\index_Daten.html" "C:\temp\Xml\Parameter.xml" "C:\temp\Transformation\DatenConverter.xsl"
Ob es jetzt ein lokaler oder ein Netzwerkpfad ist "weiß ich nicht", das Batchfile wird von einem Script erstellt und der Ausgabepfad kann eingestellt werden.
Wenn ich jetzt in der Transformationsdatei bei einem lokalen Pfad als result-document nur ein Dateiname "bla.txt" angebe, dann landet "bla.txt" automatisch auch in C:\temp\Test\unterverz. Aber beim Netzwerkpfad geht es halt nicht.
Auch nicht wenn ich schreibe file:////bla.txt (da gibts keinen Saxon Fehler, aber die Datei bla.txt ist nirgends zu finden)
Komm ich irgendwie vom xsl aus auf den Ausgabepfad?
Wie schon im Ausgangsposting geschrieben, einfach einen Parameter ins xsl dazumachen geht nicht bzw. nur ganz schwierig, da müsste man das ganze Script das die Batchdatei erstellt ändern und Sonderstricke reinwursteln.
Gruß & trotzdem Danke
sth_Weird
Hallo sth_Weird,
Jetzt habe ich aber einen Netzwerkpfad der Form \Homepage.
Und jetzt scheint das mit dem result-document nicht mehr zu funktionieren.
<xsl:result-document href="file:////NETZWERKPCNAME/verzeichnisname/dateiname.html" method="html">
<!-- ... -->
</xsl:result-document>
>
> funktioniert bei mir mit Saxon B 9.1.0.1.
>
> Grüße,
> Thomas
Hallo sth_Weird,
Ob es jetzt ein lokaler oder ein Netzwerkpfad ist "weiß ich nicht", das Batchfile wird von einem Script erstellt und der Ausgabepfad kann eingestellt werden.
Dann stelle ihn halt passend ein, entweder mit UNC-Pfad in file-Schreibweise oder bei lokaler Ausgabe eben ohne. Einfacher ist vermutlich das Mappen des Netzwerkpfades auf einen Laufwerksbuchstaben. Wie gesagt, ich komme mit der genannten file-Syntax auf Rechner im lokalen Netzwerk.
Grüße,
Thomas
Hallo Thomas
Dann stelle ihn halt passend ein, entweder mit UNC-Pfad in file-Schreibweise oder bei lokaler Ausgabe eben ohne. Einfacher ist vermutlich das Mappen des Netzwerkpfades auf einen Laufwerksbuchstaben. Wie gesagt, ich komme mit der genannten file-Syntax auf Rechner im lokalen Netzwerk.
bei mir selbst wäre das kein Problem, aber das ganze wird von "Laien" verwendet, denen ich nicht so einfach sagen kann, sie sollen ein Netzwerkverzeichnis mappen. Die wollen nur einstellen können wohin mit der Ausgabe (und ob das jetzt ein lokaler Pfad ist oder ein Netzwerkpfad das bekomme ich nicht mit) und dann auf nen Knopf drücken und schwups fertig solls sein.
Aber kann ich aus deinem Posting rausinterpretieren, dass ich von xsl aus nicht bzw. nicht ohne weiteres auf den Ausgabepfad komme (für den Pfad zur Xml gibt es ja z.B. so einfache Befehle mit document-uri und so)?
Gruß & thx
sth_Weird
Hallo sth_Weird,
Aber kann ich aus deinem Posting rausinterpretieren, dass ich von xsl aus nicht bzw. nicht ohne weiteres auf den Ausgabepfad komme (für den Pfad zur Xml gibt es ja z.B. so einfache Befehle mit document-uri und so)?
Der Ausgabepfad hat mit der Transformation nichts zu tun. Diesen benötigt der XSLT-Prozessor, um das Ergebnis abzulegen. Lässt man die Option -o weg, landet alles auf der Konsole.
Man kann natürlich einen Parameter an das Stylesheet übergeben und über diesen die xsl:result-document-Ausgabe steuern.
Grüße,
Thomas
Hallo Thomas,
Man kann natürlich einen Parameter an das Stylesheet übergeben und über diesen die xsl:result-document-Ausgabe steuern.
Diesen Weg hatte ich eigentlich im Anfangsposting wenn möglich ausgeschlossen, aber wenn es die einzige Möglichkeit ist und es anders nicht geht, muss ich's wohl entweder so machen, oder die Angabe von Netzwerkpfaden generell verbieten :-/
Danke für die Hilfe!
sth_Weird