Ruby/XSLT mag includes nicht

31/01/2008 - 00:11 von Jens Mander | Report spam
Hallo zusammen,

ich möchte ganz stumpf ein XML-File mit Hilfe eines XSL-Stylesheets
transformieren und das Ergebnis ausgeben. Dazu habe ich Ruby/XSLT
installiert und zunàchst mal nur den Beispielcode so angepasst, dass die
Pfade stimmen:

require 'rexml/document'
require 'xml/libxslt'

xslt = XML::XSLT.new()

xslt.xsl = REXML::Document.new(
File.open( "foo/bar.xsl" )
)

Allerdings bekomme ich an dieser Stelle schon eine Fehlermeldung:

I/O warning : failed to load external entity "meta.xsl"
compilation error: element include

In der Tat wird im XSL-File eine dritte Datei per <xsl:include
href="meta.xsl"/> eingebunden. Diese liegt im selben Verzeichnis wie die
eingebundene "bar.xsl" - also in "foo/" - und wenn mich nicht alles
tàuscht, sollten includes doch immer relativ zum Pfad der Ursprungsdatei
aufgelöst werden, oder? Jedenfalls scheint sich Ruby/XSLT hier zu meiner
gesteigerten Freude irgendwie anders zu verhalten.

Wenn ich das entsprechende File in den Ordner des Ruby-Scripts kopiere
klappt auch alles. Leider habe ich aber nicht nur eine, sondern ein
halbes Dutzend XSL-Files, die sich munter gegenseitig includen und keine
Möglichkeit, die Pfade im XSL zu àndern, da die Dateien auch an anderer
Stelle genutzt werden.

Hat einer von euch eine Ahnung, wie ich das Problem sauber lösen kann?

Gruß
Jens
 

Lesen sie die antworten

#1 Robert Klemme
31/01/2008 - 18:24 | Warnen spam
On 31.01.2008 00:11, Jens Mander wrote:
Hallo zusammen,

ich möchte ganz stumpf ein XML-File mit Hilfe eines XSL-Stylesheets
transformieren und das Ergebnis ausgeben. Dazu habe ich Ruby/XSLT
installiert und zunàchst mal nur den Beispielcode so angepasst, dass die
Pfade stimmen:

require 'rexml/document'
require 'xml/libxslt'

xslt = XML::XSLT.new()

xslt.xsl = REXML::Document.new(
File.open( "foo/bar.xsl" )
)



Du schließt die Datei nicht. Besser ist

xslt.xsl File.open( "foo/bar.xsl" ) {|io| REXML::Document.new io}

Allerdings bekomme ich an dieser Stelle schon eine Fehlermeldung:

I/O warning : failed to load external entity "meta.xsl"
compilation error: element include

In der Tat wird im XSL-File eine dritte Datei per <xsl:include
href="meta.xsl"/> eingebunden. Diese liegt im selben Verzeichnis wie die
eingebundene "bar.xsl" - also in "foo/" - und wenn mich nicht alles
tàuscht, sollten includes doch immer relativ zum Pfad der Ursprungsdatei
aufgelöst werden, oder? Jedenfalls scheint sich Ruby/XSLT hier zu meiner
gesteigerten Freude irgendwie anders zu verhalten.

Wenn ich das entsprechende File in den Ordner des Ruby-Scripts kopiere
klappt auch alles. Leider habe ich aber nicht nur eine, sondern ein
halbes Dutzend XSL-Files, die sich munter gegenseitig includen und keine
Möglichkeit, die Pfade im XSL zu àndern, da die Dateien auch an anderer
Stelle genutzt werden.

Hat einer von euch eine Ahnung, wie ich das Problem sauber lösen kann?



Ich würde mal einen Blick in die Sossen von REXML werfen - ist ja
schließlich alles in Ruby implementiert. Und wenn du feststellst, dass
das ein Fehler ist, kannst du es ja selber fixen oder melden.

Moment, der Fehler kommt wahrscheinlich eher aus der XSLT lib, oder?
Ist die auch pure Ruby? Dann siehe oben. Ansonsten vielleicht mal den
Autor fragen.

Ciao

robert

Ähnliche fragen