Frage

Ich versuche, VBScript zu verwenden, eine XSLT-Transformation auf ein XML-Objekt zu tun.
Die XSL-Datei ich übersetzen enthält die <xsl:import href="script.xsl"/> Richtlinie. Wenn ich die absolute URL (http://localhost/mysite/script.xsl) verwenden, importiert es das Stylesheet in Ordnung; aber wenn ich den relativen Pfad (script.xsl) verwenden es meldet „Ressource nicht gefunden.“ Ich brauche diese unter einer Reihe von Maschinen zu portieren zu können, also muss ich in der Lage sein, die relative URI zu verwenden. Irgendwelche Vorschläge?

Weitere Informationen:

  • VBScript-Datei ist bei http://localhost/myscript.asp
  • erste XSL-Datei ist bei http://localhost/mysite/styles.xsl
  • zweite XSL-Datei ist bei http://localhost/mysite/script.xsl
  • den relativen Pfad mysite/script.xsl verwenden, funktioniert aber auch nicht funktionieren

Nachtrag:

Danke, alle, für Ihre Antworten. Je mehr ich graben sich in den Code, der dies tut, der Fremde ist. myscript.asp ist eine eher ungewöhnliche Zusammenstellung von Code. Was passiert ist, styles.xsl wird in der HTML-Ausgabe von myscript.asp als XML-Chunk enthalten (<xml src=...>) und dann wird das Chunk als Sheet geladen, mit VBScript, auf der Client-Seite. Dieses Stylesheet wird dann verwendet, um einen XML-Chunk zu verwandeln, die über XMLHTTP abgerufen wird. Das Problem ist also der Kontext styles.xsl wird der HTML-Code auf der Client-Seite und hat keine Beziehung zu dem script.xsl ist.

War es hilfreich?

Lösung 6

Erster Versuch:

Ich habe versucht script.xsl als eine andere XML-Chunk einschließlich und die Import-Anweisung in jeder Hinsicht zu ändern ich mir vorstellen könnte, aber ohne Erfolg.

Endlösung:

Da die absolute URL für includeing script.xsl von Anfang an arbeitete, war meine endgültige Lösung style.xsl zu konvertieren mit dem richtigen Doctype style.asp. In dieser Datei konnte ich dann den Servernamen, das Protokoll und den Pfad abrufen und sie an die richtige Stelle in der Import-Anweisung echo asp verwenden. Wenn dann diese Datei in mysscript.asp aufgenommen wurde, hatte er die richtige absolute URL für den Server. Dies ist ein bisschen wie ein Hack, aber der einzige Weg, ich diese eher gewundenen Situation zu lösen gefunden.

Andere Tipps

Das aktuelle Verzeichnis für xsl: import, xsl: include, und das Dokument () -Funktion ist das Verzeichnis mit der Transformation, die sie verwendet. So ist die xsl:. Import-Direktive, die Sie gesagt haben sollten Sie verwenden zu funktionieren

Das einzige, was ich daran denken kann, könnte dies Auswirkungen auf: Wenn Sie einen relativen Pfad verwenden, die Datei direkt aus dem Dateisystem gelesen werden, während, wenn Sie einen absoluten URI verwenden, ist es vom Web-Server abgerufen werden. Ist es möglich, dass einige Sicherheitseinstellung gibt es die Skripte von Lesen von Dateien in diesem Verzeichnis verhindert wird?

@ Jon Ich glaube, Sie sind sehr nah ... aber es sollte nicht sein ...

<xsl:import href="/mysite/script.xsl"/>

... mit einem führenden Schrägstrich?

Ich würde dies angehen, indem Sie Sysinternals Process Monitor . Mit diesem Tool läuft, können Sie tatsächlich sehen, welche Dateien das Skript zu öffnen versucht, auch wenn sie nicht existieren.

Ist es möglich, dass das „aktuelle Verzeichnis“ für die Zwecke des relativen Pfades könnte der Standort Ihrer ASP-Seite, nicht Ihre XSL-Datei? Mit anderen Worten, wenn Sie nicht bereits haben, können Sie versuchen:

<xsl:import href="mysite/script.xsl"/>

ich oft in dieses Problem, weil es ein benutzerdefinierter URI Resolver ist durch eine Bibliothek verwendet wird, ich nicht sehen kann (oder nicht wissen, über, weil ich nicht zugehörige Dokumentation gelesen habe.) Ich kann mich nicht erinnern, wenn dies ist spec oder nicht in der Saxon / Java-Welt, wird der benutzerdefinierte URI Resolver ersten Riss an versuchen URIs für include / Import-Anweisungen sowie das Dokument () Funktion, sondern zu lösen. Wenn es nicht den URI auflösen kann, wird ein Standard-URI Resolver gibt es einen Versuch, die in der Regel nie vermisst, wenn dann URI absolut ist.

Also, es ist wahrscheinlich etwas in dem ASP-Engine, die ein Kontext angetrieben URI Resolver auf dem App Kontexts verwendet.

Sie müssen eine Variable, die die AppRoot definiert, oder Webroot wenn JS, Bild oder CSS-Dateien geladen werden.

 <xsl:import href="{$approot}/somedir/script.xsl"/>

oder wenn Sie den Wert in der XML haben,

 <xsl:import href="{/root/@approot}/somedir/script.xsl"/>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top