<xsl:attribute>  
Permet de créer un attribut dans le document de sortie. <xsl:attribute> a pour avantage de permettre de créer la valeur d'attribut à partir de parties du document de sortie, de texte codé en dur, de valeurs renvoyées par les fonctions et de tout autre valeur accessible depuis la feuille de style.
 
Catégorie

Instruction

 
Attributs obligatoires
name
L'attribut name définit le nom de l'attribut créé par l'élément < xsl:attribute >. (peu importe la manière de le formuler, aborder la question des attributs de l'élément < xsl:attribute > est pour le moins déroutant, me direz-vous)

 
Attributs facultatifs
namespace
L'attribut namespace définit l'URI d'espace de noms à utiliser pour cet attribut dans le document de sortie. Le préfixe d'espace de noms utilisé ne dépend pas de votre ressort ; le seul élément que vous spécifiez avec l'attribut namespace est l'URI de l'espace de noms.

 
Contenu

Un modèle XSLT. En d'autres termes, vous pouvez créer les contenus d'un attribut avec les éléments <xsl:choose>, <xsl:text> et <xsl:value-of>.

 
Apparaît dans

<xsl:attribute> apparaît dans un modèle.

 
Défini dans

XSLT section 7.1.3, Création d'attributs avec xsl:attribute.

 
Exemple

Dans cet exemple, il est question de créer une table HTML à partir du document XML suivant :

<?xml version="1.0"?>
<list xml:lang="en">
  <title>Albums I've bought recently:</title>
  <listitem>The Sacred Art of Dub</listitem>
  <listitem>Only the Poor Man Feel It</listitem>
  <listitem>Excitable Boy</listitem>
  <listitem xml:lang="sw">Aki Special</listitem>
  <listitem xml:lang="en-gb">Combat Rock</listitem>
  <listitem xml:lang="zu">Talking Timbuktu</listitem>
  <listitem xml:lang="jz">The Birth of the Cool</listitem>
</list>

On crée une table contenant chaque élément <listitem> dans une ligne séparée de la colonne de droite de la table, ainsi qu'une cellule simple où rowspan équivaut au nombre d'éléments <listitem> figurant dans le document XML dans la colonne de gauche. Il n'est pas possible de coder en dur une valeur pour l'attribut rowspan car le nombre d'éléments <listitem> peut changer. Cette feuille de style utilise <xsl:attribute> pour obtenir le résultat escompté :

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="html"/>

  <xsl:template match="/">
    <html>
      <head>
        <title><xsl:value-of select="list/title"/></title>
      </head>
      <body>
        <xsl:apply-templates select="list"/>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="list">
    <table border="1" width="75%">
      <tr>
        <td bgcolor="lightslategray" width="100" align="right">
          <xsl:attribute name="rowspan">
            <xsl:value-of select="count(listitem)"/>
          </xsl:attribute>
          <p style="font-size: 125%">
            <xsl:value-of select="title"/>
          </p>
        </td>
        <td>
          <xsl:value-of select="listitem[1]"/>
        </td>
      </tr>
      <xsl:for-each select="listitem">
        <xsl:if test="position() > 1">
          <tr>
            <td>
              <xsl:value-of select="."/>
            </td>
          </tr>
        </xsl:if>
      </xsl:for-each>
    </table>
  </xsl:template>

</xsl:stylesheet>

Le document XML généré est le suivant :

<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Albums I've bought recently:</title>
</head>
<body>
<table width="75%" border="1">
<tr>
<td align="right" width="100" rowspan="7" bgcolor="lightslategray">
<p style="font-size: 125%">Albums I've bought recently:</p>
</td><td>The Sacred Art of Dub</td>
</tr>
<tr>
<td>Only the Poor Man Feel It</td>
</tr>
<tr>
<td>Excitable Boy</td>
</tr>
<tr>
<td>Aki Special</td>
</tr>
<tr>
<td>Combat Rock</td>
</tr>
<tr>
<td>Talking Timbuktu</td>
</tr>
<tr>
<td>The Birth of the Cool</td>
</tr>
</table>
</body>
</html>

Plusieurs attributs sont codés en dur sur l'élément <td> ; ces attributs sont associés à l'attribut créé avec <xsl:attribute>. Vous pouvez avoir autant d'éléments <xsl:attribute> que souhaité, mais ils doivent tous apparaître ensemble comme le premier élément de l'élément auquel vous avez ajouté les attributs. La Figure A-3 montre l'apparence du document HTML généré.

Document comportant des attributs générés

Dans cet exemple, on aurait pu utiliser un modèle de valeur d'attribut. Pour générer la valeur de l'attribut rowspan, procédez comme suit :

<td bgcolor="lightslategray" rowspan="{count(listitem)}"
  width="100" align="right">

L'expression entre les accolades ({}) est évaluée et remplacée par la valeur qui lui est associée, quelle qu'elle soit. Dans ce cas, count(listitem) renvoie le nombre 7, qui devient la valeur de l'attribut rowspan.