XSLT no funciona en el navegador web

Tengo un archivo XSLT para estilos en XML. Se puede acceder al XSLT a través de una URL ( http: //someurl/somefile.xsl ) sin problemas.

Cuando inserto la misma URL en una instrucción de procesamiento xml-stylesheet , solo representa texto sin formato en navegadores (FF, IE),

   ... 

pero cuando uso una ruta de archivo local (archivo descargado a la misma carpeta que el archivo XML), funciona como un encanto:

   ... 

¿Por qué?

Ejecutar XSLT en un navegador web

Ejecutar XSLT en el navegador está sujeto a algunas limitaciones:

  • XSLT 2.0 no es compatible con ninguno de los principales navegadores web.

  • Los modelos de seguridad del navegador difieren con respecto al procesamiento XSLT.

    • Las restricciones entre dominios a menudo requerirán que XSLT cargue desde el mismo origen que el XML. (Esto parece morderte en este caso).

    • Chrome no permite la ejecución local de XSLT (incluso cuando el XML está cargado localmente). Esto puede ser molesto durante el desarrollo.

Por estos motivos, XSLT se ejecuta más a menudo en el servidor o en modo por lotes en lugar de en el navegador.

Si desea ejecutar XSLT en el navegador y hacer que funcione con Chrome, Firefox e IE, debe

  1. Use XSLT 1.0 solamente, no XSLT 2.0.
  2. Use una instrucción de procesamiento xml-stylesheet en el archivo XML como lo hizo para vincular el archivo XSLT con el archivo XML:

     < ?xml version="1.0" encoding="UTF-8"?> < ?xml-stylesheet type="text/xsl" href="http://origin-domain/path/to/file.xsl"?> ... 
  3. Sirva el XSLT desde un servidor, no desde un archivo local.
  4. Asegúrese de que el XSLT se origina en el mismo dominio que el XML.

Finalmente, asegúrese de revisar la consola del navegador para ver si hay algún mensaje de error. Por ejemplo, esto es lo que IE muestra cuando no se puede ubicar el XSLT:

enter image description here

Dado que esta respuesta está vinculada a otras preguntas, agregaré una actualización: ahora es posible ejecutar hojas de estilos XSLT 3.0 en el navegador utilizando la implementación de Saxon-JS. Esto elimina muchas de las limitaciones presentes con los procesadores XSLT incorporados que vienen con los diferentes navegadores.