xsl:variable用于定义不可变变量,支持select属性或标签体赋值,作用域限于声明块内,全局变量需在stylesheet顶层定义,局部变量优先级高于同名全局变量,引用时用$变量名。

xsl:variable 用于在 XSLT 中定义一个不可变的变量(注意:XSLT 中变量一旦赋值就不能修改,类似“常量”)。
定义变量:用 xsl:variable 声明
变量必须在模板(xsl:template)、模式(xsl:for-each)或样式表顶层作用域中定义。基本语法是:
- 写法一(直接在属性中赋值):
- 写法二(在标签体中赋值,支持复杂内容):
两种方式都有效。select 属性适合简单表达式;标签体方式适合拼接文本、嵌套元素或条件逻辑(比如配合 xsl:choose)。
变量作用域:只在定义它的块内有效
变量不能跨模板访问。例如:
一款多用途的企业软件前端HTML模板。IT软件服务公司网站响应式单页模板。基于CSS、JS、HTML模块化原则创建的。如果您的站点不需要所有元素,那么可以轻松地删除不必要的组件。模板的代码干净,友好,注释良好。这使得编辑和自定义模板变得很容易。
- 在 xsl:template match="/" 里定义的变量,不能在子模板 xsl:template match="book" 中直接使用
- 若需多个地方用同一个值,可把变量放在顶层(xsl:stylesheet 下),成为全局变量
- 局部变量优先级高于同名全局变量(就近原则)
使用变量:通过 $变量名 引用
变量值通过带美元符的名称引用,可用于任何支持 XPath 表达式的地方:
...
注意:不能用 $price 来赋值给另一个变量——除非它本身就是一个有效的 XPath 表达式结果(比如节点集、字符串、数字等)。
常见注意事项
- 变量名必须符合 XML 名字规则(不能以数字开头,不能含空格和特殊符号)
- 不支持“先声明后赋值”,必须定义时就初始化(XSLT 1.0/2.0/3.0 均如此)
- 如果 select 表达式返回空序列,变量值为空(不是 null,也不是未定义)
- XSLT 2.0+ 支持显式类型声明,如 as="xs:string",有助于调试和类型安全
基本上就这些。xsl:variable 看似简单,但作用域和不可变性容易忽略,写的时候多留意上下文。









