XSLT无法在Web浏览器中运行

时间:2015-04-29 10:56:18

标签: xml xslt browser

我有一个XML格式的XSLT文件。可以通过URL(http://someurl/somefile.xsl)访问XSLT而不会出现问题。

当我在xml-stylesheet处理指令中插入相同的URL时,它只在浏览器中呈现纯文本(FF,IE),

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="http://someurl/somefile.xsl"?>
<rootElement>...</rootElement>

但是当我使用本地文件路径(文件下载到与XML文件相同的文件夹)时,它就像一个魅力:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="somefile.xsl"?>
<rootElement>...</rootElement>

为什么?

2 个答案:

答案 0 :(得分:7)

在Web浏览器中运行XSLT

在浏览器中运行XSLT受到一些限制:

  • 任何主要的网络浏览器都不支持XSLT 2.0。

  • 浏览器安全模型在XSLT处理方面有所不同。

    • 跨域限制通常要求XSLT从与XML相同的源加载。 (在这种情况下,这似乎是在咬你。)

    • Chrome会运行not allow本地加载的XSLT(即使本地加载了XML)。这在开发过程中会很烦人。

由于这些原因,XSLT通常在服务器上运行或以批处理模式运行,而不是在浏览器中运行。

如果您希望在浏览器中运行XSLT并使其与Chrome,Firefox和IE配合使用,则必须

  1. 仅使用XSLT 1.0, XSLT 2.0。
  2. 使用XML文件中的xml-stylesheet处理指令,将XSLT文件与XML文件链接起来:

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="http://origin-domain/path/to/file.xsl"?>
    <rootElement>...</rootElement>
    
  3. 从服务器提供XSLT,而不是从本地文件提供服务。
  4. 确保XSLT源自与XML相同的域。
  5. 最后,请务必check the browser console查看任何错误消息。例如,这是IE无法找到XSLT时显示的内容:

    enter image description here

答案 1 :(得分:2)

由于这个答案与其他问题相关联,我将添加一个更新:现在可以使用Saxon-JS实现在浏览器中运行XSLT 3.0样式表。这解除了各种浏览器附带的内置XSLT处理器的许多限制。