You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XSLT 2:如何将输入流作为参数传递给XSL样式表(Saxon HE 10)

Saxon HE 10 传入输入流作为XSL样式表参数的实现方案
  • 你无法直接将原始InputStream传入setStylesheetParameters方法,需要先将输入流解析为XdmValue的子类实例,最常用的是对应XML文档的XdmNode类型。
  • 第一步:使用Saxon的DocumentBuilder解析输入流为XdmNode,示例代码如下:
// 复用你初始化Xslt30Transformer时创建的Processor实例即可
Processor processor = new Processor(false);
DocumentBuilder docBuilder = processor.newDocumentBuilder();

// 替换为你自己的输入流实例
InputStream targetInputStream = ...;
XdmNode xmlDocNode = docBuilder.build(new StreamSource(targetInputStream));
  • 第二步:将解析得到的XdmNode作为参数传入转换器:
Map<QName, XdmValue> paramMap = new HashMap<>();
// QName的参数名需要和XSL中定义的param名称完全一致
paramMap.put(new QName("test"), xmlDocNode);
xslt30Transformer.setStylesheetParameters(paramMap);
  • 第三步:调整XSL样式表中的参数定义,匹配传入的节点类型:
<!-- 删除原有默认的字符串取值,声明参数为XML文档节点类型 -->
<xsl:param name="test" as="document-node()"/>

如果你需要传入的是非XML格式的二进制流,可以将流内容编码为base64字符串后封装为XdmAtomicValue传入,XSL中对应声明参数类型为xs:base64Binary即可。

内容的提问来源于stack exchange,提问作者amuru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:45:00