XSLT的xsl:attribute-set怎么复用属性定义

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 更易维护。