如果XML是本地的并且XSL在远程服务器上,IE9和Chrome不会使用XSL呈现XML

时间:2011-07-08 16:11:17

标签: xml google-chrome internet-explorer-9 xslt

我有以下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 个答案:

答案 0 :(得分: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中,两者都需要在网络服务器上或本地存储(没有混合)。

答案 1 :(得分:3)

  

我们有一个桌面应用程序   生成XML报告和显示   他们在浏览器中,用   托管在a上的样式表   远程服务器

我认为最简单的方法是通过HTTP协议在用户的本地硬盘上(使用该应用程序)下载或存储/缓存(最后一份)样式表,然后执行“完全合法”的客户端转换。