2008-09-26 24 views
6

Estoy tratando de usar VBScript para hacer una transformación XSLT en un objeto XML.
El archivo XSL que estoy traduciendo incluye la directiva <xsl:import href="script.xsl"/>. Si uso la URL absoluta (http://localhost/mysite/script.xsl), importa bien la hoja de estilo; sin embargo, si uso la ruta relativa (script.xsl), informa "recurso no encontrado". Necesito poder portar esto entre un conjunto de máquinas, así que necesito poder usar el URI relativo. ¿Alguna sugerencia?Ruta relativa para xsl: import o xsl: include

Notas:

  • archivo VBScript es en http://localhost/myscript.asp
  • primer archivo XSL es al http://localhost/mysite/styles.xsl
  • segundo archivo XSL está en http://localhost/mysite/script.xsl
  • utilizando la ruta relativa mysite/script.xsl tampoco funciona

Adición:

Gracias, a todos, por sus respuestas. Cuanto más profundizo en el código que está haciendo esto, más extraño es. myscript.asp es una compilación bastante inusual de código. Lo que sucede es styles.xsl se incluye en el resultado HTML de myscript.asp como un fragmento XML (<xml src=...>) y luego ese fragmento se carga como una hoja de estilo, utilizando VBScript, en el lado del cliente. Esta hoja de estilo se usa para transformar un fragmento XML que se recupera a través de XMLHTTP. Entonces, el problema es que el contexto de styles.xsl es el HTML en el lado del cliente y no tiene relación con dónde está script.xsl.

+0

¿Alguna posibilidad de publicar el código de myscript.asp? ¿Myscript.asp vive en http: //localhost/myscript.asp o http: //localhost/mysite/myscript.asp? – Kev

Respuesta

0

primer intento:

me trataron incluyendo script.xsl como otro trozo de XML y el cambio de la declaración de importación en todo lo que podía imaginar, pero sin éxito.

solución final:

Desde la url absoluta para includeing script.xsl trabajó desde el principio, mi solución final era convertir a style.xsl style.asp con el tipo de documento correcto. En este archivo, pude recuperar el nombre del servidor, el protocolo y la ruta, y hacer eco de ellos en el lugar correcto en la declaración de importación utilizando asp. Luego, cuando este archivo se incluyó en mysscript.asp, tenía la url absoluta correcta para el servidor. Esto es un poco un truco, pero la única forma que encontré para resolver esta situación complicada.

+3

Pero, pero ... eso apesta como una solución :( – Kimi

0

¿Es posible que el "directorio actual" a los fines de la ruta relativa sea la ubicación de su página ASP, no su archivo XSL? En otras palabras, si no lo ha hecho, puede intentar:

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

Intenté esto. No funcionó – alumb

1

El directorio actual para xsl: import, xsl: include, y la función de documentos() es el directorio que contiene el archivo de transformación que los utiliza. Entonces, la directiva xsl: import que ha dicho que está utilizando debería estar funcionando.

Lo único que puedo pensar que podría afectar esto: si usa una ruta relativa, el archivo se lee directamente desde el sistema de archivos, mientras que si usa un URI absoluto, se está recuperando del servidor web. ¿Es posible que haya alguna configuración de seguridad que impida que los scripts lean archivos en este directorio?

1

@ Jon Creo que están muy cerca ... pero no debe ser ...

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

... con una barra inicial?

0

A menudo me encuentro con este problema porque hay una resolución de URI personalizada que está utilizando una biblioteca que no puedo ver (o que no conozco porque no leí la documentación pertinente). No recuerdo si esto es una especificación o no, pero en el mundo de Saxon/java, el resolutor de URI personalizado obtiene el primer intento de tratar de resolver los URI para las sentencias de inclusión/importación, así como la función document(). Si no puede resolver el URI, un resolvedor de URI predeterminado lo prueba, lo que generalmente nunca falla cuando el URI es absoluto.

Por lo tanto, es probable que haya algo en el motor de ASP que esté utilizando una resolución de URI basada en contexto en función del contexto de la aplicación.

-1

Necesita una variable que defina approot o webroot al cargar archivos JS, Image o CSS.

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

o si tiene el valor en el XML,

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

No funciona para xsl: importación, funciona para elementos generales como