fjh: URL/Pfad zum Stylesheet einer XML-Datei aus XSL-Datei auslesen

Beitrag lesen

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