如何在xsl文档中使用javascript函数

How to use javascript functions in xsl document?

本文关键字:javascript 函数 文档 xsl      更新时间:2023-09-26

我在我的xsl文档中有以下代码:我试图应用它,但它返回以下错误:错误:XSLTProcessor: transformToXml (XSLTProcessor()。: 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>
<msxsl:script language="javascript" implements-prefix="user">

在Chrome中不支持XSL中脚本的Microsoft扩展。

如果您希望您的XSL在浏览器中工作,请查看这个XSLT浏览器比较图,因为跨浏览器的支持非常有限。

最好的选择是使用XSLT 1.0-only结构,而不是使用外部文档(xsl:import, document()函数),因为这些在Chrome默认情况下是被阻止的,如果你需要函数,使用命名模板,因为创建跨浏览器扩展函数会很棘手(我不确定Chrome是否支持这个,但肯定不支持MS命名空间)。

如果您确实需要使用特定于供应商的扩展,请确保在这些指令周围添加xsl:if,并使用system-property('xsl:vendor')测试子句,这将检查您是哪种浏览器。

我发现给定的错误相当奇怪,我本来希望它是类似于"function not found"的东西。

请注意,在默认情况下,即使在Internet Explorer中,XSLT脚本也是默认禁用的。

如果您有机会在浏览器之外运行样式表,您可能会节省很多麻烦和宝贵的时间,并且它可能使您能够使用XSLT 2.0或3.0,而不仅仅是XSLT 1.0。Saxon有一个基于js的XSLT 2.0处理器版本,名为Saxon- ce, Frameless是XSLT 2.0规范大部分内容的跨浏览器实现,并声称是轻量级的。XSLT 2.0对使用扩展函数或指令的要求要少得多,因为它更加灵活,允许您使用xsl:function创建自己的样式表函数。