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 一起工作,您必须
- 仅使用 XSLT 1.0,不 XSLT 2.0。
在 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>
- 从服务器而不是本地文件提供 XSLT。
- 确保 XSLT 来自与 XML 相同的域。
最后,请务必 check the browser console 了解任何错误消息。例如,这是无法定位 XSLT 时 IE 显示的内容:
由于此答案与其他问题相关联,因此我将添加一个更新:现在可以 运行 使用 Saxon-JS 实现在浏览器中使用 XSLT 3.0 样式表。这解除了各种浏览器附带的内置 XSLT 处理器存在的许多限制。
我有一个 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 一起工作,您必须
- 仅使用 XSLT 1.0,不 XSLT 2.0。
在 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>
- 从服务器而不是本地文件提供 XSLT。
- 确保 XSLT 来自与 XML 相同的域。
最后,请务必 check the browser console 了解任何错误消息。例如,这是无法定位 XSLT 时 IE 显示的内容:
由于此答案与其他问题相关联,因此我将添加一个更新:现在可以 运行 使用 Saxon-JS 实现在浏览器中使用 XSLT 3.0 样式表。这解除了各种浏览器附带的内置 XSLT 处理器存在的许多限制。