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

如何在Saxon HE 12的XSL流水线中传递参数?

问题原因

你用错了transform函数的参数传递方式:parameters字段是给样式表全局参数(也就是<xsl:stylesheet>下定义的<xsl:param>)传值的,而你的child.xsl里,docType和debugCheck是初始模板main的局部参数,所以用parameters根本传不过去。

解决方案

两种办法任选:

办法一:把模板参数改成全局参数

修改child.xsl,把模板里的局部参数移到样式表级别:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="3.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="xml" indent="yes"/>
  
  <!-- 改成全局参数 -->
  <xsl:param name="docType"/>
  <xsl:param name="debugCheck"/>

  <xsl:template name="main">
    <xsl:message select="'[CHILD] docType: ', $docType"/>
    <xsl:message select="'[CHILD] debugCheck: ', $debugCheck"/>
    <result docType="{$docType}" debugCheck="{$debugCheck}"/>
  </xsl:template>

</xsl:stylesheet>

pipeline.xsl不用改,执行原命令就能正常传参。

办法二:用initial-template-parameters传模板局部参数

如果不想改child.xsl,就修改pipeline.xsl里的runtime变量,把parameters换成initial-template-parameters——这个字段是专门给初始模板传局部参数的:

<xsl:variable name="runtime" select="map {
  'stylesheet-location': 'child.xsl',
  'source-node': .,
  'initial-template': QName('', 'main'),
  'initial-template-parameters': map {
    'docType': $docType,
    'debugCheck': 'from-pipeline'
  }
}"/>

child.xsl保持原样,参数就能正确传递到模板里。

验证结果

执行原命令:

java -jar "saxon-he-12.8.jar" -xsl:pipeline.xsl -s:input.xml -o:output.xml docType=test

会看到正确的日志输出:

[PIPELINE] docType param: test
[CHILD] docType: test
[CHILD] debugCheck: from-pipeline

生成的output.xml也会有正确的参数值:

<?xml version="1.0" encoding="UTF-8"?>
<result docType="test" debugCheck="from-pipeline"/>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 14:25:11