xsl:attribute-set的核心价值是复用属性定义——通过顶层命名集合打包常用属性,支持动态计算、多集合并覆盖及继承式复用,需避免循环引用。
xsl:attribute
-set 的核心价值就是复用属性定义——它把一组常用属性打包命名,之后 anywhere 需要,只要引用名字就能一次性应用全部属性,避免重复写 。
定义可复用的属性集
在 顶层(不能嵌套在模板里)用 定义命名集合,必须带 name 属性:
- 每个 可包含零个或多个 子元素
- 属性名和值可以是字面量,也可以用 或表达式动态计算
- 示例:定义通用字体样式
Segoe UI, sans-serif
16px
1.5
在元素上直接复用
通过 xsl:use-attribute-sets 属性(注意不是 use-attribute-sets),把一个或多个属性集名空格分隔地传入目标元素:
- 支持在 、、文本结果元素(如
、
等)上使用
- 多个属性集按顺序合并,后出现的同名属性会覆盖前面的
- 示例:给生成的
标签复用字体 + 强调色
段落内容
组合多个属性集(继承式复用)
用 use-attribute-sets 属性让一个属性集“继承”其他属性集,实现层级复用:
- 在 标签自身上设置 use-attribute-sets,列出要复用的其他属性集名
- 这样新属性集 = 继承的属性 + 自己定义的属性
- 禁止循环引用(比如 A use-attribute-sets="B",B use-attribute-sets="A")
#2c3e50
#f8f9fa
注意事项和常见坑
复用时容易忽略但关键的细节:
- ),不是 上
- 如果元素本身已声明同名属性,它会覆盖属性集中同名属性(就近优先)
- 属性集必须定义在 或 直接子节点位置,不能放在模板内部
- XSLT 1.0 不支持在 内部用 或 ,逻辑需提前处理好
基本上就这些。用好 attribute-set 就像写 CSS class,一次定义,多处调用,样式逻辑更清晰,XSLT 更易维护。