W3docs

addAttribute()

Apprenez à utiliser SimpleXMLElement::addAttribute() en PHP pour ajouter des attributs à des éléments XML, y compris les attributs avec espaces de noms.

Introduction

SimpleXML est une extension PHP qui fournit une API simple et facile à utiliser pour travailler avec des documents XML. La fonction SimpleXMLElement::addAttribute() est l'une des nombreuses fonctions que SimpleXML propose pour manipuler des documents XML. C'est un outil puissant qui permet d'ajouter des attributs à un élément d'un document XML. Dans cet article, nous allons examiner en détail la fonction SimpleXMLElement::addAttribute() et la manière de l'utiliser en PHP.

Syntaxe

addAttribute() est une méthode d'un objet SimpleXMLElement. Elle ajoute un attribut à l'élément sur lequel elle est appelée et ne retourne rien (void) :

public SimpleXMLElement::addAttribute(
    string $name,
    string $value = "",
    ?string $namespace = null
): void
ParamètreObligatoireDescription
$nameOuiLe nom de l'attribut à ajouter (par exemple id ou xml:lang).
$valueNonLa valeur de l'attribut. Par défaut, une chaîne vide.
$namespaceNonL'URI de l'espace de noms auquel appartient l'attribut. À omettre pour un attribut simple sans espace de noms.

Comme elle modifie l'élément en place, vous n'avez pas besoin d'assigner le résultat — le nouvel attribut apparaît simplement sur l'élément après l'appel.

Exemple de base

L'utilisation la plus courante consiste à ajouter un ou plusieurs attributs à un élément que vous venez de créer :

php— editable, runs on the server

Ce code crée un élément <book>, lui ajoute un attribut isbn, puis ajoute deux éléments enfants avant de sérialiser le document en chaîne de caractères avec asXML(). Le résultat est :

<?xml version="1.0"?>
<book isbn="123456789"><title>PHP Basics</title><author>John Doe</author></book>

Pourquoi utiliser addAttribute() plutôt que la syntaxe tableau ?

SimpleXML vous permet de lire les attributs avec la syntaxe tableau — $element['isbn'] — et vous pouvez même les écrire de cette façon. Alors, pourquoi addAttribute() existe-t-il ?

  • C'est la méthode documentée pour créer un attribut. La syntaxe d'écriture par tableau fonctionne pour modifier une valeur qui existe déjà, mais addAttribute() est explicite quant à l'ajout d'un nouvel attribut.
  • Elle prend en charge les espaces de noms. La syntaxe tableau ne permet pas d'associer un espace de noms à l'attribut défini ; le troisième paramètre de addAttribute() le permet.
<?php

$xml = new SimpleXMLElement('<book isbn="123456789"></book>');

// Update an existing attribute (array syntax is fine here):
$xml['isbn'] = '000000000';

// Add a brand-new attribute:
$xml->addAttribute('language', 'en');

echo $xml->asXML();

Ajouter un attribut avec espace de noms

Lorsqu'un document utilise des espaces de noms XML, passez l'URI de l'espace de noms en troisième argument. Le nom de l'attribut doit inclure le préfixe auquel vous souhaitez le lier :

<?php

$xml = new SimpleXMLElement('<book></book>');
$xml->addAttribute('xml:lang', 'en', 'http://www.w3.org/XML/1998/namespace');

echo $xml->asXML();

Cela produit <book xml:lang="en"/>. Sans l'argument d'espace de noms, le : dans le nom serait traité comme une partie littérale du nom de l'attribut plutôt que comme un préfixe d'espace de noms.

Pièges courants

  • Elle ne remplace pas. Appeler addAttribute() avec un nom qui existe déjà ajoute un second attribut portant ce nom, ce qui produit du XML invalide. Pour modifier une valeur existante, utilisez plutôt la syntaxe d'écriture par tableau ($xml['isbn'] = '...').
  • Les caractères spéciaux sont échappés automatiquement. Des valeurs comme Tom & Jerry sont automatiquement encodées en Tom &amp; Jerry dans la sortie, vous n'avez donc pas à les échapper vous-même.
  • L'ordre est important avec les espaces de noms. Ajoutez les attributs avec espace de noms après que l'élément existe ; vous ne pouvez pas associer un espace de noms à un attribut sur un élément qui n'est pas dans la portée de cet espace de noms sans le déclarer.
<?php

$xml = new SimpleXMLElement('<book></book>');
$xml->addAttribute('isbn', '123 & 456');

echo $xml->asXML(); // <book isbn="123 &amp; 456"/>

Fonctions associées

  • addChild() — ajouter un élément enfant plutôt qu'un attribut.
  • asXML() — sérialiser le SimpleXMLElement en chaîne XML.
  • attributes() — lire les attributs déjà présents sur un élément.

Conclusion

SimpleXMLElement::addAttribute() est la méthode explicite et compatible avec les espaces de noms pour ajouter des attributs lors de la construction de XML avec SimpleXML. Utilisez-la pour créer des attributs (notamment ceux avec espace de noms), et recourez à la syntaxe d'écriture par tableau lorsque vous avez seulement besoin de mettre à jour une valeur existante. Gardez à l'esprit qu'elle ne remplace jamais un attribut existant et qu'elle échappe automatiquement les caractères spéciaux.

Pratique

Pratique
Que fait la fonction addAttribute en PHP ?
Que fait la fonction addAttribute en PHP ?
Was this page helpful?