attributes()
Apprenez à lire, parcourir, modifier, ajouter et supprimer des attributs XML avec PHP SimpleXML, y compris les attributs avec espace de noms.
Introduction
En XML, un attribut est une paire nom/valeur attachée à la balise ouvrante d'un élément, comme isbn dans <book isbn="123456789">. PHP SimpleXML expose ces attributs via une petite API semblable à un array, vous permettant de les lire, modifier, ajouter et supprimer sans analyser le XML manuellement.
Cette page couvre quatre tâches courantes — lire un seul attribut, parcourir tous les attributs avec attributes(), modifier des valeurs et en ajouter de nouveaux — ainsi que deux pièges fréquents : le transtypage et les attributs avec espace de noms.
Lire un seul attribut
Traitez l'élément comme un array et indexez-le par le nom de l'attribut :
Il y a un piège courant : $xml['isbn'] n'est pas une string ordinaire — c'est un SimpleXMLElement. Il s'affiche correctement car il est converti à la volée, mais si vous le comparez strictement (===) ou le stockez pour plus tard, castez-le d'abord :
<?php
$xml = new SimpleXMLElement('<book isbn="123456789"></book>');
$isbn = (string) $xml['isbn']; // cast to a real string
var_dump($isbn === '123456789');
// bool(true)Utilisez isset() pour vérifier l'existence d'un attribut avant de le lire :
<?php
$xml = new SimpleXMLElement('<book isbn="123456789"></book>');
echo isset($xml['isbn']) ? "has isbn\n" : "no isbn\n";
echo isset($xml['lang']) ? "has lang\n" : "no lang\n";
// has isbn
// no langLister tous les attributs avec attributes()
Quand vous ne connaissez pas les noms des attributs à l'avance, appelez la méthode attributes(). Elle retourne un SimpleXMLElement sur lequel vous pouvez itérer, avec le nom de l'attribut comme clé et sa valeur comme valeur :
<?php
$xml = new SimpleXMLElement('<book isbn="123456789" lang="en"><title>PHP Basics</title></book>');
foreach ($xml->attributes() as $name => $value) {
echo "$name = $value\n";
}
// isbn = 123456789
// lang = enComme le résultat est dénombrable, vous pouvez aussi obtenir le nombre d'attributs :
<?php
$xml = new SimpleXMLElement('<book isbn="123456789" lang="en"></book>');
echo count($xml->attributes());
// 2Modifier des valeurs d'attributs
Pour modifier un attribut, assignez-lui une nouvelle valeur via la syntaxe array, puis sérialisez avec asXML() :
Ajouter des attributs
Un nouvel élément créé avec simplexml_load_string() ou new SimpleXMLElement() peut ne pas posséder l'attribut dont vous avez besoin. Ajoutez-en un avec addAttribute() en passant le nom et la valeur :
Notez qu'assigner une valeur à un attribut inexistant ($xml['isbn'] = '...') le crée également — mais addAttribute() est le seul moyen d'ajouter un attribut avec espace de noms.
Supprimer un attribut
Il n'existe pas de méthode dédiée à la suppression. Utilisez unset() pour supprimer l'attribut :
<?php
$xml = new SimpleXMLElement('<book isbn="123456789" lang="en"></book>');
unset($xml['lang']);
echo $xml->asXML();
// <?xml version="1.0"?>
// <book isbn="123456789"/>Attributs avec espace de noms
Les attributs appartenant à un espace de noms XML (par exemple meta:rating) sont masqués lors d'un appel simple à attributes(). Passez l'URI de l'espace de noms pour les lire :
<?php
$xml = new SimpleXMLElement(
'<book xmlns:meta="http://example.com/meta" meta:rating="5"><title>PHP Basics</title></book>'
);
foreach ($xml->attributes('http://example.com/meta') as $name => $value) {
echo "$name = $value\n";
}
// rating = 5Résumé
- Lisez un seul attribut avec la syntaxe array :
$xml['isbn']. Castez-le en(string)pour les comparaisons strictes. - Parcourez tous les attributs avec
attributes(); le résultat est itérable et dénombrable. - Assignez une nouvelle valeur pour modifier, utilisez
addAttribute()pour ajouter, etunset()pour supprimer. - Passez un URI d'espace de noms à
attributes()pour accéder aux attributs avec espace de noms.
Pour aller plus loin, consultez la vue d'ensemble de SimpleXML, simplexml_load_string() et l'analyse du XML avec SimpleXML.