我的xsl文档中有以下代码:我尝试应用它,但它返回以下错误: 错误:XSLTProcessor :: transformToXml()[xsltprocessor.transformtoxml]:XPath评估未返回任何结果。 有没有人有想法?
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:user="http://mycompany.com/mynamespace"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" version="1.0">
<xsl:output method="text" encoding="UTF-8" />
<xsl:template match="/">
<xsl:value-of select="CARRIERNAME"/>
<xsl:value-of select="user:FormatescapeEmbeddedCommas()"/>
</xsl:template>
<msxsl:script language="javascript" implements-prefix="user">
function FormatescapeEmbeddedCommas() {
return "ABC";
}
</msxsl:script>
</xsl:stylesheet>
答案 0 :(得分:2)
<msxsl:script language="javascript" implements-prefix="user">
Chrome中无法支持Microsoft extension for scripting in XSL。
如果您希望XSL在浏览器中运行,请查看此XSLT browser comparison chart,因为不幸的是跨浏览器支持非常有限。
最好的办法是使用仅限XSLT 1.0的构造,不使用外部文档(xsl:import
,document()
功能),因为这些在Chrome中默认被阻止,如果您需要功能,使用命名模板,因为创建跨浏览器扩展功能会很棘手(我不确定Chrome是否支持此功能,但绝对不支持MS名称空间)。
如果您确实需要使用特定于供应商的扩展程序,请确保使用xsl:if
的test-clause围绕这些说明添加system-property('xsl:vendor')
,这将检查您的浏览器。
我发现给定的错误相当奇怪,我原以为它会像“找不到函数”。
请注意,默认情况下,即使在Internet Explorer中,XSLT scripts are disabled by default。
也是如此如果你有机会在浏览器之外运行样式表,你可能会省去很多麻烦和宝贵的时间,并且它可能使你能够使用XSLT 2.0或3.0而不仅仅是XSLT 1.0。 Saxon有JS-powered version of their XSLT 2.0 processor名为Saxon-CE,Frameless is a cross-browser implementation of a large part of the XSLT 2.0 specification并声称是轻量级的。 XSLT 2.0使用扩展函数或指令的要求要少得多,因为它更灵活,允许您使用xsl:function
创建自己的样式表函数。