Saxon 是 Java 平台上成熟且功能全面的 XSLT/XQuery 处理器,支持 XSLT 1.0–4.0 和 XQuery 1.0–4.0;提供免费版(HE)和商业版(PE/EE),HE 版适用于日常转换与轻量服务。

Saxon 是 Java 平台上最成熟、功能最全的 XSLT 和 XQuery 处理器,支持从 XSLT 1.0 到 4.0、XQuery 1.0 到 4.0 的完整规范(取决于版本)。它分免费版(Saxon-HE)和商业版(Saxon-PE/EE),日常转换、测试、轻量级服务用 HE 就够了。
快速上手:命令行运行 XSLT
下载 Saxon-HE(如 saxon-he-12.4.jar),确保系统已安装 Java 11+:
- 基本转换:
java -jar saxon-he-12.4.jar -s:input.xml -xsl:transform.xsl -o:output.html - 指定输出格式(如 HTML):
-o:out.html -xsl:style.xsl -s:data.xml -t(-t开启调试输出) - 传入参数:
-param:name="John" -param:debug="true()",XSLT 中用接收
Java 代码中调用 Saxon API
添加 Maven 依赖(以 Saxon-HE 12.4 为例):
net.sf.saxon saxon-he 12.4
简单 XSLT 转换示例:
立即学习“Java免费学习笔记(深入)”;
- 创建
Processor实例(线程安全,建议复用) - 用
XsltCompiler编译样式表(可缓存XsltExecutable提升性能) - 用
XsltTransformer设置源文档、结果目标(如DomDestination或StreamResult) - 支持 DOM、SAX、StAX、Pull API 等多种输入输出方式;推荐用
DocumentBuilder解析 XML 字符串或流
执行 XQuery(比 XSLT 更灵活的数据提取场景)
Saxon 同样提供完整 XQuery 支持,适合从 XML 中抽取结构化数据(如转 JSON、生成报告片段):
- 命令行:
java -jar saxon-he-12.4.jar -q:query.xq -s:books.xml - Java 中用
XQueryCompiler编译查询,XQueryEvaluator执行;可绑定外部变量(setExternalVariable())或上下文节点 - 支持高阶函数、JSON 序列化(
json-to-xml()/xml-to-json())、自定义函数(通过 Java 方法注册)
常见配置与避坑提示
实际使用中容易忽略但影响行为的关键点:
- 默认不启用 DTD 或外部实体解析(安全考虑),如需解析需显式设置
processor.setConfigurationProperty(FeatureKeys.DTD_VALIDATION, true) - 字符编码:命令行加
-xi:on启用 XInclude;Java 中用DocumentBuilder.setBaseURI()避免相对路径解析失败 - Saxon-HE 不支持 XSLT 3.0 的打包样式表(.xslx)、流式处理(
xsl:stream)或某些高级优化,这些需 PE/EE 版本 - 调试技巧:加
-TJ输出详细调用栈,或在 XSLT 中用xsl:message terminate="no"打印变量值










