Java XSLT转换时如何传递参数 Transformer.setParameter

7次阅读

Transformer.setParameter() 是 Java 中向 XSLT 传递参数的标准方式,需在 XSLT 中用声明同名参数,调用前设置且名称严格匹配;支持 String、Boolean 等基本类型,null 会回退默认值;带命名空间需用 QName;调试可用输出验证。

Java XSLT 转换时如何传递参数 Transformer.setParameter

在 Java 中使用 XSLT 进行 XML 转换时,Transformer.setParameter() 是向 XSLT 样式表传递参数的标准方式。关键在于:XSLT 中必须用 声明同名参数,且参数类型默认为 StringObject(如 BooleanNumberNodeList 等),JAXP 会自动做适配。

参数声明与命名需严格匹配

XSLT 文件中必须显式定义参数,否则传入无效:

 

Java 端调用时名称必须完全一致(区分大小写),且应在 transformer.transform() 之前设置:

  • transformer.setParameter("userName", "Alice");
  • transformer.setParameter("showDetails", Boolean.TRUE);

支持的参数类型及注意事项

JAXP 支持多种参数类型,但实际行为取决于 XSLT 处理器 (如 Xalan、Saxon):

立即学习 Java 免费学习笔记(深入)”;

  • 基本类型(StringBooleanDoubleInteger)会被自动转换为 XPath 等效值
  • 若传入自定义对象,需确保其可被 XSLT 引擎序列化(多数情况下仅推荐用简单类型)
  • null 表示该参数未设置,XSLT 中将回退到 select 默认值

动态参数与命名空间处理

如果 XSLT 中参数名带命名空间(较少见),Java 中也需用带命名空间的 QName 对象:

  • QName qname = new QName("http://example.com/ns", "token");
  • transformer.setParameter(qname, "abc123");

普通场景无需命名空间,直接用字符串名即可。

调试技巧:确认参数是否生效

若参数未起作用,可临时在 XSLT 中加入诊断输出:

userName = 

运行时查看控制台输出,或启用 Transformer 的调试日志(如 Xalan 的 -Dorg.apache.xalan.xslt.verbose=true)。

星耀云
版权声明:本站原创文章,由 星耀云 2025-12-29发表,共计953字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources