XSLT本身不支持直接调用JavaScript函数,但可通过处理器扩展间接实现:旧版IE的MSXML支持msxsl:script,Saxon-Java调用Java方法,Saxon-JS在Node.js/浏览器中安全注入JS函数。

XSLT 本身不直接支持调用 JavaScript 函数,因为 XSLT 是一种声明式、基于 XML 的转换语言,运行在 XSLT 处理器(如 libxslt、Saxon、MSXML)中,而 JavaScript 是宿主环境(如浏览器或 Node.js)的脚本语言。但**在特定环境和配置下,可以间接实现 XSLT 调用 JavaScript 函数**,关键看处理器是否支持扩展函数(extension functions),以及是否启用了 JS 支持。
早期 IE(IE6–IE11)使用 MSXML 解析器,支持通过 msxsl:script 元素嵌入 JScript(微软版 JavaScript):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:myjs="http://example.com/myjs">
<msxsl:script language="JScript" implements-prefix="myjs">
function toUpper(str) {
return str ? str.toUpperCase() : '';
}
</msxsl:script>
<xsl:template match="/">
<result><xsl:value-of select="myjs:toUpper('hello')"/></result>
</xsl:template>
</xsl:stylesheet>⚠️ 注意:此方式仅限旧版 IE + MSXML,现代浏览器(Chrome/Firefox/Safari)完全不支持,且存在安全限制,不推荐用于新项目。
Saxon-HE/PE/EE 支持 Java extension functions。虽然不能直调 JS,但你可以把逻辑写成 Java 类,再从 XSLT 中调用:
立即学习“Java免费学习笔记(深入)”;
com.example.StringHelper.toUpperCase(String)
-ext:on 启用扩展,并注册命名空间前缀(如 xmlns:java="http://saxon.sf.net/java-type")java:com.example.StringHelper.toUpperCase('hello')
✅ 这是生产环境中最稳定、可移植的方式之一,尤其适合服务端 XSLT 转换。
Saxon-JS(Saxon 官方推出的浏览器/Node.js 版 XSLT 3.0 引擎)支持在 XSLT 中调用 JavaScript 函数,但需满足以下条件:
<function></function> 声明一个 wrapper 函数SaxonJS.transform() 的 functions 参数注入 JS 函数my:upper('abc'))示例(JS 端):
const result = SaxonJS.transform({
stylesheetFileName: "style.xsl",
sourceFileName: "input.xml",
functions: [{
namespace: "http://example.com/my",
name: "upper",
arity: 1,
call: (str) => str.toUpperCase()
}]
});对应 XSLT 中:
<xsl:stylesheet ... xmlns:my="http://example.com/my">
<xsl:template match="/">
<out><xsl:value-of select="my:upper('hello')"/></out>
</xsl:template>
</xsl:stylesheet>✅ 这是目前在前端或 Node.js 中**最现代、标准、安全的调用方式**。
不要尝试在 XSLT 中拼接字符串后用 eval() 执行 JS,也不要在输出 HTML 后靠 DOM 操作“补救”。这类做法:
❌ 应避免。
基本上就这些。核心原则是:XSLT 不是通用编程语言,它的扩展能力取决于底层处理器。优先选 Saxon-JS(前端/Node)或 Saxon-Java(服务端),按规范注册 JS 函数;别依赖过时的 MSXML 或 hack 方式。不复杂但容易忽略的是——先确认你用的处理器版本和扩展支持策略,再设计调用路径。
以上就是XSLT怎么调用JavaScript函数的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号