Pregunta

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, por lo que necesito poder usar el URI relativo. ¿Alguna sugerencia?

Notas:

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

Anexo:

Gracias a todos por sus respuestas. Cuanto más profundizo en el código que hace esto, más extraño es. styles.xsl es una compilación de código bastante inusual. Lo que sucede es que <xml src=...> se incluye en la salida HTML de <=> como un fragmento XML (<=>) y luego ese fragmento se carga como una hoja de estilo, usando 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 <=> es el HTML en el lado del cliente y no tiene relación con el lugar donde está <=>.

¿Fue útil?

Solución 6

Primer intento:

Intenté incluir script.xsl como otro fragmento xml y cambiar la declaración de importación de todas las formas que pude imaginar, pero sin éxito.

Solución final:

Dado que la url absoluta para incluir script.xsl funcionó desde el principio, mi solución final fue convertir style.xsl a style.asp con el doctype correcto. En este archivo, pude recuperar el nombre del servidor, el protocolo y la ruta y hacerlos eco en el lugar correcto en la declaración de importación usando asp. Luego, cuando este archivo se incluyó en mysscript.asp, tenía la url absoluta correcta para el servidor. Este es un truco, pero la única manera que encontré para resolver esta situación bastante complicada.

Otros consejos

El directorio actual para xsl: import, xsl: include, y la función document () es el directorio que contiene la transformación que los usa. Entonces, la directiva xsl: import que has dicho que estás usando debería estar funcionando.

Lo único que se me ocurre puede afectar esto: si usa una ruta relativa, el archivo se lee directamente del sistema de archivos, mientras que si usa un URI absoluto, se recupera del servidor web. ¿Es posible que haya alguna configuración de seguridad que impida que los scripts lean archivos en este directorio?

@ Jon Creo que estás muy cerca ... pero no debería ser ...

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

... con una barra inclinada?

Yo abordaría esto ejecutando Sysinternals Process Monitor . Con esta herramienta en ejecución, puede ver qué archivos intenta abrir su script, incluso si no existen.

¿Es posible que el " directorio actual " para propósitos de la ruta relativa, ¿podría ser la ubicación de su página ASP, no su archivo XSL? En otras palabras, si aún no lo ha hecho, puede intentar:

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

A menudo me encuentro con este problema porque hay una resolución de URI personalizada utilizada por una biblioteca que no puedo ver (o no sé porque no leí la documentación pertinente). No puedo recordar si esto es especificada o no, pero en el mundo sajón / java, el solucionador de URI personalizado se resuelve al intentar resolver los URI para las declaraciones de inclusión / importación, así como la función document (). Si no puede resolver el URI, un solucionador de URI predeterminado lo prueba, que generalmente nunca falla cuando el URI es absoluto.

Entonces, es probable que haya algo en el motor ASP que esté utilizando un resolutor URI basado en contexto basado en el contexto de la aplicación.

Necesita una variable que defina la aprobación o la raíz web 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"/>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top