PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Parameterübergabe in .sh Dateien



devent
18.09.06, 21:02
Hallo
ich habe ein Xslt das ein Parameter "sprache" erwartet.


<xsl:param name="sprache"/>
<xsl:for-each select="Text[@sprache = $sprache]">

Als parser verwende ich saxon8. In meinem Gnome-Terminal führe ich dann aus:
java -jar saxon8.jar -o _de.html test.xml test.xslt sprache="de"
Das funktioniert auch, nur funktioniert es nicht wenn ich den Befehl in eine ausführbare sh Dateie stecke.
In der Datei habe ich nur folgendes stehen:


java -jar saxon8.jar -o _de.html test.xml test.xslt sprache="de"
java -jar saxon8.jar -o _en.html test.xml test.xslt sprache="en"

Igrendwie fügt er oder lässt was weg bei sprache="de", denn der Präfix @sprache = $sprache funktioniert nicht mehr.

Weis vielleicht einer wo das Problem ist ?

Fabeltier
19.09.06, 03:11
Hallo

Es waere sinnvoll mal die Fehlermeldung zu sehn, dafuer wird sie ja auch ausgegeben. Was mir auffaellt bei Deinen Pfaden/Dateinamen, die Du an die JVM zur Ausgabe uebergibst: versuchs mal im Script mit absoluten Pfadangaben, afaik sollten die dann auch eigentlich mit ':' aneinandergehaengt werden und nicht per empty space. Vllt liegts ja daran, ansonsten zeig mal die Fehlermeldung.

devent
19.09.06, 03:34
Das ist ja das: Es gibt keine !
Der parser wird ohne Fehler ausgeführt, nur wird das Präfix "missachtet".
Wenn ich mittels


<b><xsl:value-of select="$sprache"/></b>

den Parameter ausgeben lasse, kommt wie erwartet <b>de</b> raus. Aber der Vergleich funktioniert nicht

[@sprache = $sprache]
Ich kann mir das nur so erklären das vielleicht durch das Script irgend ein Steuerzeichen hinzukommt, der aber normal nicht sichtbar ist.:confused:

Wenn ich ganz normal im Terminal den Befehl eingeb:
java -jar saxon8.jar -o _de.html test.xml test.xslt sprache="de"
funktionier alles.

Das Script führe ich im selben Verzeichnis aus indem die XML und Xslt-Dateien liegen.

Das mit dem : verstehe ich nicht.

heatwalker
19.09.06, 07:56
Bin mir nicht sicher, aber versuchs doch mal so:

java -jar saxon8.jar -o "_de.html test.xml test.xslt sprache=\"de\""
java -jar saxon8.jar -o "_en.html test.xml test.xslt sprache=\"en\""

Fabeltier
19.09.06, 13:09
hallo,
ich verstehe das mit dem "Vergleich" nicht ganz ich dachte vergleichen tut man mit '=='? Egal! Was ich mit dem ':' meinte ist folgendes:

java -jar saxon8.jar -o _de.html:test.xml:test.xslt sprache="de"

Ich wundere mich jetzt allerdings schon etwas, also die : braucht man fuer die JVM und -o ist afaik ne Ausgabeanweisung fuer die JVM, aber "sprache" ist garantiert kein Param der JVM. Dh vllt liegts auch an der Reihenfolge? Vllt "sprache" und die Params fuer das jar, direkt hinter den Namen des Jar's setzen und mal ausprobieren?kA..

devent
19.09.06, 14:02
Ich glaub ihr habt mich total falsch verstanden :)
Also, saxon8 ist ein Parser, der als Input die XML und Xslt Datei nimmt und daraus eine Html-Datei parsed.

saxon8.jar -o _de.html test.xml test.xslt sprache="de"

-o ist die Output-Datei _de.html, dann die xml, dann die Xslt Datei. Der Parameter sprache wird an die Xslt übergeben, so das man den beim Parsen benutzen kann.

Die XML-Datei sieht dann so aus:


<Beispiel>
<Text sprache="de">Deutscher Text</Text>
<Text sprache="en">Englischer Text</Text>
</Beispiel>


Die Xslt:


<xsl:param name="sprache"/>
<xsl:for-each select="Text[@sprache = $sprache]">
<xsl:value-of select="."/>
</xsl:for-each>

Das, [@sprache = $sprache], ist ein Präfix, der alle Text-Token rausfiltert die der Anweisung entsprechen.
@sprache ist dabei der Attribut in der Text-Datei, $sprache ist der Parameter innerhalb der Xslt-Datei.

saxon8.jar -o _de.html test.xml test.xslt sprache="de"

Übergibt also dem Parameter sprache den Wert "de". Auf der Kommandozeile funktioniert das auch wunderbar, aber nicht als Script.

So muss ich das ständig von hand eintippen, anstatt ein Script zu erstellen.

heatwalker
19.09.06, 14:09
Hast du mal versucht deine Optionen mit den Anführungszeichen zu kommentieren, wie ich oben angedacht habe?

devent
19.09.06, 14:42
Das ist interessant, ich habe die alten Scripte gelöscht, den die habe ich von meiner Ntfs-Festplatte kopiert. Dann habe ich sie neu erstellt und jetzt funktionieren sie.
Kann es an der Zeichencodierung gelegen haben ?


java -jar saxon8.jar -o _de.html test.xml test.xslt sprache="de"
java -jar saxon8.jar -o _en.html test.xml test.xslt sprache="en"

heatwalker
19.09.06, 14:55
Wär möglich. Die Returns könnten falsch codiert worden sein.
Tritt aber normalerweise nur auf, wenn du das script auch unter Win erstellt hast.

devent
19.09.06, 16:17
naja egal ist erledigt.
Kann man den Thread als gelöst markieren ?