我创建了一个文件“ name.js”,我也创建了“ name.xslt”,我想从“ name.xslt”中的“ name.js”调用getName函数。为此,我需要导入“ name.js”,然后从该文件中调用该函数。
请帮助我如何在XSLT中导入“ name.js”以及如何从js文件中调用函数?
答案 0 :(得分:1)
除非您使用支持使用Javascript的XSLT 2.0处理器来实现扩展功能,否则这是不可能的。在您提到的评论中,您使用了Saxon,Saxon不支持此功能,因为它首先允许您使用xsl:function
https://www.w3.org/TR/xslt-30/#stylesheet-functions使用纯XSLT和XPath来实现自己的功能,除此之外,您还可以编写扩展名Java函数(对于Java版本)或C#或VB.NET函数(对于.NET版本),请参见http://saxonica.com/html/documentation/extensibility/了解详细信息。
诸如Altova或Xml Prime之类的其他XSLT可能会为您提供一些使用Javascript或JScript来实现扩展功能的支持,但通常仅限于这些语言的核心引擎,因此取决于您的脚本文件的功能,可能无济于事完全假设脚本文件尝试使用特定于浏览器API的对象和功能,例如窗口,文档。
答案 1 :(得分:0)
您将需要两个xslt文件,第一个包含javascript代码,第二个将导入它,例如: 第一个文件名为first.xslt(此处为javascript):
<msxsl:script language="JScript" implements-prefix="user">
function getName(nodelist) {
return "David";
}
</msxsl:script>
第二个文件将是main.xslt(此处将首先导入。xslt):
<xsl:import href="first.xsl"/>
<xsl:template match="/">
<xsl:value-of select="user:getName(.)"/>
</xsl:template>
答案 2 :(得分:0)
如果您使用的是基于Java的Saxon处理器,并且调用此JS代码真的很重要,则可以编写一个Java扩展函数,该函数使用Nashorn调用JS代码,然后从Saxon调用Java扩展函数。但是,除非JS代码确实非常特别,否则用XSLT或Java重写其逻辑可能会省些功夫。