xsl:attribute-set的核心价值是复用属性定义——通过顶层命名集合打包常用属性,支持动态计算、多集合并覆盖及继承式复用,需避免循环引用。

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










