我有以下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报告并在浏览器中显示它们,并使用托管在远程服务器上的样式表进行转换。
答案 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协议在用户的本地硬盘上(使用该应用程序)下载或存储/缓存(最后一份)样式表,然后执行“完全合法”的客户端转换。