2008-09-26 9 views
6

J'essaie d'utiliser VBScript pour effectuer une transformation XSLT sur un objet XML.
Le fichier XSL que je suis en train de traduire inclut la directive <xsl:import href="script.xsl"/>. Si j'utilise l'URL absolue (http://localhost/mysite/script.xsl), il importe la feuille de style fine; Toutefois, si j'utilise le chemin relatif (script.xsl), il indique "ressource non trouvée". J'ai besoin d'être capable de porter ceci parmi un ensemble de machines, ainsi je dois pouvoir employer l'URI relatif. Aucune suggestion?Chemin relatif pour xsl: import ou xsl: include

Remarques:

fichier
  • VBScript est à http://localhost/myscript.asp
  • premier fichier XSL est à http://localhost/mysite/styles.xsl secondes fichier XSL
  • est à http://localhost/mysite/script.xsl
  • en utilisant le chemin relatif mysite/script.xsl ne fonctionne pas non plus

Addendum:

Merci à tous pour vos réponses. Plus je creuse dans le code qui le fait, l'étranger c'est. myscript.asp est une compilation de code plutôt inhabituelle. Qu'est-ce qui se passe est styles.xsl est inclus dans la sortie HTML de myscript.asp sous la forme d'un bloc XML (<xml src=...>), puis ce morceau est chargé en tant que feuille de style, en utilisant VBScript, sur le côté client. Cette feuille de style est ensuite utilisée pour transformer un bloc XML récupéré via XMLHTTP. Donc, le problème est le contexte de styles.xsl est le HTML sur le côté client et n'a aucune relation avec script.xsl.

+0

Une chance d'afficher le code pour myscript.asp? Est-ce que myscript.asp vit sur http: //localhost/myscript.asp ou http: //localhost/mysite/myscript.asp? – Kev

Répondre

0

Première tentative:

J'ai essayé, y compris script.xsl comme un autre morceau xml et changer la déclaration d'importation de toutes les façons que je pouvais imaginer, mais sans succès.

solution finale:

Depuis l'url absolue pour includeing script.xsl a travaillé depuis le début, ma solution finale était de convertir style.xsl à style.asp avec le doctype correct. Dans ce fichier, j'ai pu récupérer le nom, le protocole et le chemin du serveur et les renvoyer au bon endroit dans l'instruction import en utilisant asp. Ensuite, lorsque ce fichier a été inclus dans mysscript.asp, il avait l'URL absolue correcte pour le serveur. C'est un peu un hack mais le seul moyen que j'ai trouvé pour résoudre cette situation plutôt alambiquée.

+3

Mais, mais .... ce qui craint comme une solution :( – Kimi

0

Est-il possible que le "répertoire courant" aux fins du chemin relatif soit l'emplacement de votre page ASP, pas votre fichier XSL? En d'autres termes, si vous avez pas déjà, vous pouvez essayer:

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

J'ai essayé cela. N'a pas fonctionné. – alumb

1

Le répertoire courant pour xsl: import, xsl: include, et la fonction document() est le répertoire contenant la transformation qui les utilise. Donc, la directive xsl: import que vous avez dit que vous utilisez devrait fonctionner. La seule chose à laquelle je pense peut affecter ceci: si vous utilisez un chemin relatif, le fichier est lu directement depuis le système de fichiers, tandis que si vous utilisez un URI absolu, il est récupéré sur le serveur web. Est-il possible que certains paramètres de sécurité empêchent les scripts de lire des fichiers dans ce répertoire?

1

Je pense que vous @ Jon êtes très proche ... mais faut-il pas ...

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

... avec une barre oblique?

0

Je rencontre souvent ce problème car il existe un résolveur d'URI personnalisé utilisé par une bibliothèque que je ne vois pas (ou que je ne connais pas car je n'ai pas lu la documentation pertinente.) Je ne me souviens pas si C'est une spécification ou non, mais dans le monde Saxon/Java, le résolveur URI personnalisé obtient d'abord un crack pour essayer de résoudre les URI pour les instructions include/import ainsi que la fonction document(). S'il ne peut pas résoudre l'URI, un résolveur d'URI par défaut lui donne un essai, qui ne manque jamais quand l'URI est absolu. Donc, c'est probablement quelque chose dans le moteur ASP qui utilise un résolveur d'URI basé sur le contexte basé sur le contexte de l'application.

-1

Vous avez besoin d'une variable qui définit l'approche, ou webroot lors du chargement de fichiers JS, Image ou CSS.

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

ou si vous avez la valeur dans le fichier XML,

<xsl:import href="{/root/@approot}/somedir/script.xsl"/> 
+0

Il ne fonctionne pas pour xsl: l'importation, il fonctionne pour les éléments généraux tels que