<xsl:template match="person">
<span class="person"><xsl:apply-templates/></span>
</xsl:template>
However, it's trickier if the value of the attribute
is not known when the stylesheet is written, but instead must be read
from the input document. The solution is to use an
attribute value template. An attribute value
template is an XPath expression enclosed in curly braces
that's placed in the attribute value in the
stylesheet. When the processor outputs that attribute, it replaces
the attribute value template with its value. For example, suppose you
wanted to write a name template that changed the input
name elements to empty elements with
first_name, middle_initial, and
last_name attributes like this:
<name first="Richard" initial="P" last="Feynman"/>
This template accomplishes that task:
<xsl:template match="name">
<name first="{first_name}"
initial="{middle_initial}"
last="{last_name}" />
</xsl:template>
The value of the first attribute in the stylesheet
is replaced by the value of the first_name element
from the input document. The value of the initial
attribute is replaced by the value of the
middle_initial element from the input document;
the value of the last attribute is replaced by the
value of the last_name element from the input
document.
 |  |  |
8.8. Modes |  | 8.10. XSLT and Namespaces |