我有一个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>
为什么?
答案 0 :(得分:7)
在浏览器中运行XSLT受到一些限制:
任何主要的网络浏览器都不支持XSLT 2.0。
浏览器安全模型在XSLT处理方面有所不同。
跨域限制通常要求XSLT从与XML相同的源加载。 (在这种情况下,这似乎是在咬你。)
Chrome会运行not allow本地加载的XSLT(即使本地加载了XML)。这在开发过程中会很烦人。
由于这些原因,XSLT通常在服务器上运行或以批处理模式运行,而不是在浏览器中运行。
如果您希望在浏览器中运行XSLT并使其与Chrome,Firefox和IE配合使用,则必须
使用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>
最后,请务必check the browser console查看任何错误消息。例如,这是IE无法找到XSLT时显示的内容:
答案 1 :(得分:2)
由于这个答案与其他问题相关联,我将添加一个更新:现在可以使用Saxon-JS实现在浏览器中运行XSLT 3.0样式表。这解除了各种浏览器附带的内置XSLT处理器的许多限制。