2011-07-08 12 views
8

tengo el siguiente código XML:IE9 y Chrome No volviendo XML con XSL si XML es local y XSL es el servidor remoto

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="http://www.test.com/AuditTrail.xsl"?> 

y XSL:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <html> 
     <head><title>Test</title></head> 
    </html> 
</xsl:stylesheet> 

Esto funciona bien en IE8, pero no en IE9 o Chrome. He leído que IE9 parece prohibir la carga de XSL desde un servidor remoto si el archivo fuente XML está en la máquina local. ¿Hay alguna forma de que IE9 y Chrome apliquen un archivo XSL remoto a un archivo XML local sin interferir con la configuración de seguridad de los navegadores? Tenemos una aplicación de escritorio que genera informes XML y los muestra en un navegador, transformado con hojas de estilo alojadas en un servidor remoto.

Respuesta

7

¿Funciona a nivel local? No lo creo porque hay algunos errores tanto en XML como en XSLT.

¡Bloques de cromo, procesamiento XML y XSLT local! Es un problema o lo deshabilitaron por razones de seguridad. Mira esto Chrome Bug Report para algunas reparaciones.

IE9 deshabilitó el soporte de la mezcla de XML local y XSLT remoto. ¡También por razones de seguridad! (No tengo un vínculo para eso)

Su XML debe tener al menos un elemento raíz:

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="http://www.test.com/AuditTrail.xsl"?> 
<hello/> 

y su XSLT necesita tener algunas plantillas XSLT:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 
    <html> 
    <head><title>Test</title></head> 
    </html> 
</xsl:template> 

</xsl:stylesheet> 

Con estas correcciones este ejemplo funcionará para IE8 y Firefox.
En Chrome, XML y XSLT deben estar en un servidor web. En IE9 ambos necesitan estar en un servidor web o almacenarse localmente (sin mezcla).

+0

@Tom tal vez cambie a una solución de javascript como p. Ej. jquery transformar Esto debería funcionar sin reescribir el XSLT (pero no lo probó) [Ejemplo aquí] (http://stackoverflow.com/questions/2042178/chrome-and-safari-xslt-using-javascript/2042441#2042441) – therealmarv

+0

Mi xml y xslt tiene un elemento raíz y una plantilla, simplemente lo dejé porque solo quería mostrar el encabezado, debería haber incluido todo. Sin embargo, su respuesta confirma que esto se debe a restricciones de seguridad (web y local), por lo que no hay forma de hacerlo funcionar sin cambiar el xml y la forma en que se transforma. – TJF

+1

Existen varias soluciones (malas) pero creo que lo mejor es que cambie la forma en que su programa transforma este XML, no confíe en el navegador XSLT, use su propia biblioteca XSLT si desea mostrar informes. Aquí hay algunas soluciones malas: - Reduzca su IE a IE8. - Pruébalo con Firefox. - Intenta ejecutar Chrome con este [Chromium Bug Comment] (http://code.google.com/p/chromium/issues/detail?id=70088#c12) – therealmarv

3

Tenemos una aplicación de escritorio que genera informes XML y muestra en un navegador, transformado con hojas de estilo que están alojados en un servidor remota

creo que forma más sencilla es descargar o almacenar/almacenar en caché (última copia de) la hoja de estilo a través del protocolo HTTP en el disco duro local del usuario (usando esa aplicación) y luego realizar una transformación del lado del cliente "completamente legal".