每个人都度过愉快的一天
我试图从XML中调用XSLT文件,我使用从REST获取的数据:text / xml进行渲染。 最基本的尝试是使用这行代码:
window.open( 'data:text/xml,' + encodeURIComponent( responseData ) );
我的另一个尝试是在模态iframe(使用angular-material)中使用xml数据设置src,然后两个测试都使用URL打开XML但是出现此错误:
加载样式表时出错:未知错误(805303f4)
我在firefox和chrome中测试了它,并且chrome更清晰,控制台中的错误详情:
从网址 数据加载网址 route-to-xsl.xsl 的不安全尝试:text / xml,。 .. 域名,协议和端口必须匹配。
我尝试使用样式表的绝对路径,包括相同的协议,域等,但错误仍然存在(均在iframe或新选项卡选项中)。
任何帮助,谢谢。
答案 0 :(得分:1)
由于这是Firefox或Chrome等网络浏览器中的客户端Javascript,我建议使用XSLTProcessor
执行XSLT转换,您可以使用XMLHttpRequest
提取XSLT样式表,解析您的使用responseData
DOMParser
,然后您可以使用XSLTProcessor
进行转换。
我认为您不会让浏览器执行data
URL中引用的XSLT,除非XSLT本身作为数据嵌入:
var encodedXslt = 'data:application/xml,' + encodeURIComponent(document.getElementById('xslt').textContent);
var xmlCode = document.getElementById('xml').textContent;
var pi = '<?xml-stylesheet type="text/xsl" href="' + encodedXslt + '"?>';
var encodedXml = 'data:application/xml,' + encodeURIComponent(pi + xmlCode);
window.frames.xmlDisplay.location.href = encodedXml;
<script id="xslt" type="application/xml+xslt">
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="yes"/>
<xsl:template match="list">
<ul>
<xsl:apply-templates/>
</ul>
</xsl:template>
<xsl:template match="item">
<li>
<xsl:apply-templates/>
</li>
</xsl:template>
</xsl:stylesheet>
</script>
<script id="xml" type="application/xml">
<list>
<item>foo</item>
<item>bar</item>
</list>
</script>
<iframe name="xmlDisplay" width="100%" height="300"></iframe>
然而,似乎只有Mozilla吞下了尝试并应用XSLT,Chrome继续抱怨不安全的尝试。因此,我认为实现任何XSLT转换更好,更便携,您可以将输入作为带有XSLTProcessor的Javascript字符串。