如何在xsl文件中使用javascript函数?

时间:2015-09-03 10:18:32

标签: javascript xml google-chrome xslt xpath

我的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>

1 个答案:

答案 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:importdocument()功能),因为这些在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创建自己的样式表函数。