变量用于存储不可变值,参数用于接收可覆盖的外部输入;变量通过xsl:variable定义,一经赋值不可更改,适用于缓存计算结果或常量,如;参数通过xsl:param定义,支持默认值并可在调用时被覆盖,常用于模板间传参或配置行为,如;变量作用域限于声明位置及其子元素,全局变量在模板顶层定义;参数在模板调用或样式表启动时确定值,可通过命令行或API传入;关键区别在于可变性、作用时机和使用场景:变量不可重赋值,执行到时求值,适合内部固定数据;参数值可由外部注入,调用时确定,适合控制输出格式、语言等;注意命名区分大小写、不重复定义同名项、合理使用select和内容体、XSLT 2.0+支持类型声明提升健壮性;变量管“内部固定值”,参数管“外部可配值”,协同提升XSLT清晰度与灵活性。

XSLT中的变量和参数都用于存储值,但用途和行为不同:变量一旦赋值就不能更改,参数则可在调用时传入不同值,常用于模板间传递数据或定制样式表行为。
变量(xsl:variable):定义不可变的值
变量在作用域内只能赋值一次,适合保存计算结果、常量或临时中间值。它不依赖外部输入,定义即初始化。
- 用
定义简单值,如: - 用开始/结束标签包裹内容定义富文本或节点集,如:
Report
- 变量作用域是其声明所在的元素及其子元素;在模板顶层定义即为全局变量,可在整个样式表中引用(用 $name)
参数(xsl:param):支持外部传入的可覆盖值
参数本质是“可配置的变量”,默认值可被调用方覆盖,主要用于模板(xsl:template)或导入/包含的样式表中实现灵活复用。
- 在模板内定义参数:,表示默认显示日期
- 调用模板时传参:
- 主样式表可通过命令行或API传入初始参数(如 Saxon 的 -param:debug=true),此时顶层 xsl:param 会接收该值,覆盖 select 指定的默认值
变量与参数的关键区别
理解差异能避免误用:
Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统
- 可变性:变量不可重赋值;参数本身不可变,但其值可由调用方或处理器注入
- 作用时机:变量在执行到定义处时求值;参数在模板被调用(或样式表启动)时确定值
- 典型场景:用变量缓存 XPath 结果(如 $items/count(*));用参数控制输出格式、语言、调试开关等
使用注意事项
几个易错点需留意:
- 变量名和参数名区分大小写,且必须以字母或下划线开头
- 不能在同一个作用域重复定义同名变量或参数
- 若用 select 属性定义变量,其值总是结果树片段(RTF)或原子值;若省略 select 且无内容体,变量值为空序列
- XSLT 2.0+ 支持类型声明(as="xs:string"),增强健壮性,建议对关键参数启用
基本上就这些。变量管“内部固定值”,参数管“外部可配值”,配合使用能让XSLT更清晰、更灵活、更易维护。









