W3docs

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 :

php— editable, runs on the server

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 lang

Lister 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 = en

Comme 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());
// 2

Modifier des valeurs d'attributs

Pour modifier un attribut, assignez-lui une nouvelle valeur via la syntaxe array, puis sérialisez avec asXML() :

php— editable, runs on the server

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 :

php— editable, runs on the server

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 = 5

Ré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, et unset() 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.

Pratique

Pratique
Comment lire tous les attributs d'un élément SimpleXML quand vous ne connaissez pas leurs noms ?
Comment lire tous les attributs d'un élément SimpleXML quand vous ne connaissez pas leurs noms ?
Was this page helpful?