XSLT 在网络浏览器中不工作

XSLT not working in web browser

我有一个 XSLT 文件用于 XML 中的样式。 XSLT 可以通过 URL (http://someurl/somefile.xsl) 毫无问题地访问。

当我将相同的 URL 插入 xml-stylesheet 处理指令时,它只在浏览器(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>

为什么?

运行 Web 浏览器中的 XSLT

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

  • XSLT 2.0 不受任何主要 Web 浏览器的支持。

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

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

    • Chrome 将 not allow 本地加载的 XSLT 转换为 运行(即使 XML 是本地加载的)。这在开发过程中可能很烦人。

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

如果您希望 运行 在浏览器中使用 XSLT 并使其与 Chrome、Firefox 和 IE 一起工作,您必须

  1. 仅使用 XSLT 1.0, XSLT 2.0。
  2. 在 XML 文件中使用 xml-stylesheet 处理指令,就像您使用 XML 文件对 link XSLT 文件所做的那样:

    <?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 相同的域。

最后,请务必 check the browser console 了解任何错误消息。例如,这是无法定位 XSLT 时 IE 显示的内容:

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