xml - www - xslt transformation
XSL no funciona en Google Chrome (5)
He visto muchas publicaciones sobre esto ... ¡pero no puedo, por mi vida, descubrir cuál es mi problema! Google Chrome solo muestra una página en blanco cuando intento transformar XML con XSL. Cuando veo la fuente, veo el XML en bruto. IE funciona.
Tengo un documento XML que se parece a esto ...
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="http://localhost/xsl/listXSL.php"?>
<links>
<link id="1" name="Google Home Page" url="http://www.google.com/" clicks="0" />
<link id="2" name="Facebook" url="http://www.facebook.com/" clicks="1" />
<link id="3" name="Gmail" url="http://gmail.com" clicks="2" />
</links>
... y luego el archivo XSL vinculado que se ve así ...
<?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="/">
<xsl:for-each select="links/link">
<a>
<xsl:attribute name="href">
<xsl:value-of select="@url" />
</xsl:attribute>
<xsl:value-of select="@name" />
</a><br />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Puede observar que el archivo XSL es en realidad un archivo PHP, pero funciona bien en otros navegadores y he intentado cambiarlo a .xsl para Chrome, pero no ayuda. ¿Qué estoy haciendo mal aquí?
El uso del modificador --allow-file-access-from-files hace el truco para mí.
Estaba intentando usar la documentación fuera de línea del software instalado en mi sistema. IE mostró contenido solo pidiendo permiso para habilitar contenidos. Diría que esto también se puede agregar a Chrome sin sacrificar la seguridad.
En la versión anterior de Chrome, si no imprime un documento adecuado con un vocabulario conocido (HTML, XHTML, SVG, etc.) no obtendrá una página representada.
En la versión moderna (tengo 10.0.612.3 dev
instalado), obtienes un documento XML sin estilo (con un error de análisis en tu caso debido al resultado de más de un elemento raíz).
Solución : Imprima un documento HTML 4.0 adecuado (con todos los elementos obligatorios) o un documento XHTML 1.0 adecuado (también con espacio de nombres correcto).
La razón por la que esto no funciona se debe a una preocupación de seguridad que Chrome ha abordado de 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 los archivos .CSS en el mismo directorio muy bien.
La justificación dada por el equipo de Chrome en 2008 fue la this :
Imagina este escenario:
Recibe un mensaje de correo electrónico de un atacante que contiene una página web como un archivo adjunto, que descarga.
Abre la página web ahora local en su navegador.
La página web local crea un origen cuyo https://mail.google.com/mail/ .
Debido a que has iniciado sesión en Gmail, el marco carga los mensajes en tu bandeja de entrada.
La página web local lee el contenido del marco utilizando JavaScript para acceder a los marcos [0] .document.documentElement.innerHTML. (Una página web de Internet no podría realizar este paso porque provendría de un origen que no sea de Gmail; la política del mismo origen haría que la lectura fallara).
La página web local coloca el contenido de su bandeja de entrada en una y envía los datos a través de un formulario POST al servidor web del atacante. Ahora el atacante tiene su bandeja de entrada, que puede ser útil para el envío de correo basura o el robo de identidad.
Gmail no puede hacer nada para defenderse de este ataque.
Estoy de acuerdo en que es molesto, como solución tienes 2 soluciones:
Intente ejecutar Chrome con el
--allow-file-access-from-files
(no lo he probado yo mismo)Cárgalo en un host, y todo estará bien.
Pude cargar contenido XML en HTML en Chrome almacenando el XML como variable en JavaScript como se muestra a continuación.
<html>
<head>testing</head>
<body>
<span id="num"></span> <span id="street"></span><br /> <span id="city"></span>, <span id="state"></span> <span id="zip"></span>
<script>
txt="<address>"+
"<street>Roble Ave</street>"+
"<mtfcc>S1400</mtfcc>"+
"<streetNumber>649</streetNumber>"+
"<lat>37.45127</lat>"+
"<lng>-122.18032</lng>"+
"<distance>0.04</distance>"+
"<postalcode>94025</postalcode>"+
"<placename>Menlo Park</placename>"+
"<adminCode2>081</adminCode2>"+
"<adminName2>San Mateo</adminName2>"+
"<adminCode1>CA</adminCode1>"+
"<adminName1>California</adminName1>"+
"<countryCode>US</countryCode>"+
"</address>";
if (window.DOMParser)
{
parser=new DOMParser();
xmlDoc=parser.parseFromString(txt,"text/xml");
}
else // Internet Explorer
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.loadXML(txt);
}
document.getElementById("num").innerHTML=
xmlDoc.getElementsByTagName("streetNumber")[0].childNodes[0].nodeValue;
document.getElementById("street").innerHTML=
xmlDoc.getElementsByTagName("street")[0].childNodes[0].nodeValue;
document.getElementById("city").innerHTML=
xmlDoc.getElementsByTagName("adminName2")[0].childNodes[0].nodeValue;
document.getElementById("state").innerHTML=
xmlDoc.getElementsByTagName("adminCode1")[0].childNodes[0].nodeValue;
document.getElementById("zip").innerHTML=
xmlDoc.getElementsByTagName("postalcode")[0].childNodes[0].nodeValue;
</script>
</body>
</html>
Subiendo a host soves problema para mí. --la solución de cambio de acceso a archivos-acceso-desde-archivos no funcionó para mí.