IE9和Chrome无法渲染本地XML文件,若XSL文件位于远程服务器上。

8

I have the following XML:

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

以及 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>

这在IE8中可以正常工作,但在IE9或Chrome中不行。我已经了解到,如果XML源文件在本地机器上,IE9似乎禁止从远程服务器加载XSL。 有没有办法让IE9和Chrome应用远程XSL文件到本地XML文件,而不会影响浏览器的安全设置? 我们有一个桌面应用程序生成XML报告,并使用托管在远程服务器上的样式表在浏览器中显示。

2个回答

7
这在本地可以工作吗?我不认为可以,因为XML和XSLT都有一些错误。
Chrome阻止本地XML和XSLT处理!这是一个问题还是他们出于安全原因禁用了它。查看这个Chrome Bug Report以获取一些解决方法。
IE9禁用了本地XML和远程XSLT混合支持。同样是出于安全原因!(我没有相关链接)
您的XML需要至少有一个根元素:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="http://www.test.com/AuditTrail.xsl"?>
<hello/>

您的XSLT需要一些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>

通过这些更正,这个例子可以在IE8和Firefox上运行。
在Chrome中,XML和XSLT需要放在Web服务器上。在IE9中,两者都需要放在Web服务器上或本地存储(不混合使用)。


@Tom 可以考虑切换到像 jQuery Transform 这样的 JavaScript 解决方案。这应该可以在不重写 XSLT 的情况下工作(但未经测试)示例在此 - therealmarv
我的xml和xslt有一个根元素和一个模板,我只是省略了它,因为我只想显示标题,应该包括所有内容。你的答案证实了这是由于安全限制(网络和本地)引起的 - 所以没有办法在不改变xml和转换方式的情况下使其工作? - TJF
1
有几种(不好的)解决方案,但我认为最好的方法是改变程序转换XML的方式,不要依赖于浏览器XSLT,如果想显示报告,请使用自己的XSLT库。以下是一些不好的解决方案:-将IE降级到IE8。-尝试使用Firefox。-尝试在Chrome上运行此[Chromium Bug Comment](http://code.google.com/p/chromium/issues/detail?id=70088#c12)。 - therealmarv
好的,谢谢。我刚刚测试了在应用程序中应用XSLT,当它接收到XML时似乎工作正常。 - TJF

3
我们有一个桌面应用程序,可以生成XML报告并在浏览器中显示,使用托管在远程服务器上的样式表进行转换。
我认为最简单的方法是通过HTTP协议将样式表下载或存储/缓存到用户的本地硬盘(使用该应用程序),然后执行“完全合法”的客户端转换。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接