URL/Pfad zum Stylesheet einer XML-Datei aus XSL-Datei auslesen
Ulrich Hecker
- xsl
0 fjh
Hallo,
wie schon im Subject erwähnt, habe ich folgendes Problem:
Meine XML-Datei referenziert z.B. folgendes XSL(T)-Stylesheet:
...
<?xml-stylesheet type="text/xsl" href="e:\projekt\artikel.xsl"?>
...
Jetzt möchte ich von der dort angegebenen XSL(T)-Datei aus genau den unter href="..." angegebenen Pfad auslesen, etwa so wie
<xsl:value-of select="...">
oder auch anders per Javascript oder ähnliches, Hauptsache, der Pfad ist der richtige. Lese ich nämlich den Pfad über Javascript mit
var pfad = document.URL
aus, bekomme ich immer den Pfad der bereits transformierten Datei und nicht den der Original-XSL...
Weiß hier jemand Rat?
Danke, Uli
Hallo Uli,
wie schon im Subject erwähnt, habe ich folgendes Problem:
Meine XML-Datei referenziert z.B. folgendes XSL(T)-Stylesheet:
...
<?xml-stylesheet type="text/xsl" href="e:\projekt\artikel.xsl"?>
...
Jetzt möchte ich von der dort angegebenen XSL(T)-Datei aus genau den unter href="..." angegebenen Pfad auslesen, etwa so wie
<xsl:value-of select="...">
oder auch anders per Javascript oder ähnliches, Hauptsache, der Pfad ist der richtige. Lese ich nämlich den Pfad über Javascript mit
var pfad = document.URL
aus, bekomme ich immer den Pfad der bereits transformierten Datei und nicht den der Original-XSL...
Weiß hier jemand Rat?
Dazu bietet X-Path den speziellen Knotentest processing-instruction(), der Dir Knoten vom Typ Processing-Instruction auswählt. Du musst ein Template schreiben das für diesen Knotentyp gilt. Um sicherzugehen, dass Du nicht ALLE (falls du noch andere hast) Processing-Instructions auswählst, solltest du den Namen als Argument übergeben (nicht die Anführungszeichen vergessen!). Also etwa so:
<xsl:template match="processing-instruction('xml-stylesheet')>
<xsl:value-of select="."/>
</xsl:template>
Auf diese Weise kannst Du dann die gesamte PI ausgeben. Das Ergebnis in Deinem Falle wäre:
type="text/xsl" href="e:\projekt\artikel.xsl"
So nun musst Du noch an den Pfad kommen. Da aber type und href Pseudo-Attribute sind, kannst du nicht über @ oder sonstwas darauf zugreifen, sondern kommst nur über String-Funktionen ran. Z.B. so:
<xsl:template match="processing-instruction('xml-stylesheet')>
<xsl:value-of select="substring-after(., 'href=')"/>
</xsl:template>
Ergebnis dann:
"e:\projekt\artikel.xsl"
Gruß
Franz