Format

Description

The
name attribute specifies the name of the attribute set. This must be a qualified name. The contents of the
xsl:attribute-set element consists of zero or more
xsl:attribute elements. Each
xsl:attribute element specifies an attribute in the set.

To use an attribute set, specify the
use-attribute-sets attribute in one of the following elements:

xsl:element

xsl:copy

xsl:attribute-set

The value of the
use-attribute-sets attribute is a white-space-separated list of names of attribute sets. When you specify the use of an attribute set, it is equivalent to adding an
xsl:attribute element for each attribute in each named attribute set to the beginning of the contents of the element in which you specify the
use-attribute-sets attribute.

An attribute set cannot include itself. In other words, if attribute set
A specifies the
use-attribute-sets attribute, the list of attribute sets to use cannot include attribute set
A.

You can also specify an attribute set in an
xsl:use-attribute-sets attribute on a literal result element. The value of the
xsl:use-attribute-sets attribute is a white-space-separated list of names of attribute sets. The
xsl:use-attribute-sets attribute has the same effect as the
use-attribute-sets attribute on
xsl:element with one additional rule. The additional rule is that attributes specified on the literal result element itself are treated as if they were specified by
xsl:attribute elements before any actual
xsl:attribute elements but after any
xsl:attribute elements implied by the
xsl:use-attribute-sets attribute.

Thus, for a literal result element, attributes from attribute sets named in an
xsl:use-attribute-sets attribute are added first, in the order listed in the attribute. Next, attributes specified on the literal result element are added. Finally, any attributes specified by
xsl:attribute elements are added. Since adding an attribute to an element replaces any existing attribute of that element with the same name, this means that attributes specified in attribute sets can be overridden by attributes specified on the literal result element itself.

The template within each
xsl:attribute element in an
xsl:attribute-set element is instantiated each time the attribute set is used. It is instantiated using the same current node and current node list as is used for instantiating the element bearing the
use-attribute-sets or
xsl:use-attribute-sets attribute. However, it is the position in the stylesheet of the
xsl:attribute element rather than of the element bearing the
use-attribute-sets or
xsl:use-attribute-sets attribute that determines which variable bindings are visible. Consequently, only variables and parameters declared by top-level
xsl:variable and
xsl:param elements are visible.

The XSLT processor merges multiple definitions of an attribute set with the same expanded name. If there are two attribute sets with the same expanded name that both contain the same attribute, the XSLT processor chooses the attribute definition that was specified last in the stylesheet.

Example

The following example creates a named attribute set,
title-style, and uses it in a template rule: