getName()
SimpleXMLElement::getName() retourne le nom de la balise d'un élément XML. Syntaxe, exemples et comportement avec les espaces de noms en PHP.
Introduction
SimpleXMLElement::getName() retourne le nom de la balise de l'élément XML sur lequel vous l'appelez — pas son contenu textuel, pas un nom de classe. Elle fait partie de SimpleXML, l'extension PHP légère pour lire et modifier du XML avec une syntaxe objet simple.
Cette page couvre la signature de la méthode, un exemple exécutable, le comportement de getName() avec les espaces de noms et les boucles, ainsi que les pièges courants.
Syntaxe
public SimpleXMLElement::getName(): stringLa méthode ne prend aucun argument et retourne une string contenant le nom local de l'élément. Le < et > initiaux, les attributs et les nœuds enfants de l'élément sont tous ignorés — vous obtenez uniquement le nom de la balise.
Exemple de base
$xml pointe vers l'élément racine <book>, donc $xml->getName() retourne book. En accédant à l'enfant title et en appelant getName(), on obtient title. Notez que getName() vous donne le nom de la balise, tandis que (string) $xml->title vous donnerait le contenu textuel, PHP Basics.
Pourquoi l'utiliser
Vous connaissez généralement les noms des éléments à l'avance, alors pourquoi les demander à l'exécution ? getName() est surtout utile lorsque vous itérez sur des enfants dont vous ne contrôlez pas les noms — par exemple, lorsque vous parcourez une liste mixte d'enregistrements ou construisez un convertisseur générique XML-vers-array.
<?php
$xml = new SimpleXMLElement(
'<library><book>PHP</book><magazine>Wired</magazine><book>SQL</book></library>'
);
foreach ($xml->children() as $child) {
echo $child->getName() . ': ' . $child . "\n";
}
// book: PHP
// magazine: Wired
// book: SQLIci, la boucle ne code pas en dur book ou magazine ; getName() vous indique ce qu'est chaque nœud au fur et à mesure. Combinez-la avec children() pour parcourir un arbre et attributes() pour lire les attributs de chaque élément.
Espaces de noms
Pour un élément dans un espace de noms XML, getName() retourne le nom local sans le préfixe. L'exemple ci-dessous utilise getName() avec getNamespaces() pour récupérer le contexte complet.
<?php
$xml = new SimpleXMLElement(
'<root xmlns:h="http://example.com/html"><h:td>Cell</h:td></root>'
);
$cell = $xml->children('http://example.com/html')[0];
echo $cell->getName(); // td (prefix stripped)
echo "\n";
echo array_key_first($cell->getNamespaces()); // hSi vous n'appelez que getName(), vous perdez le préfixe h:, donc interrogez l'espace de noms séparément lorsque le préfixe est important.
Pièges courants
- C'est une méthode, pas une propriété. Écrivez
$el->getName()avec des parenthèses, pas$el->getName. - Elle retourne la balise, pas la valeur. Utilisez
(string) $elou$el->__toString()pour le texte à l'intérieur de l'élément. - Sélections vides. Accéder à un enfant qui n'existe pas retourne quand même un
SimpleXMLElement, etgetName()sur celui-ci retourne une string vide plutôt que de lever une exception — vérifiez aveccount()si cela vous importe. - Chargement depuis une string ou un fichier. Créez des éléments avec
simplexml_load_string()ousimplexml_load_file(); les deux retournent des objets sur lesquelsgetName()fonctionne de la même façon.
Conclusion
SimpleXMLElement::getName() retourne le nom de la balise d'un élément XML avec une syntaxe objet claire. Elle est particulièrement utile lorsque vous traitez du XML dont vous ne connaissez pas la structure à l'avance — combinez-la avec children(), attributes() et asXML() pour lire et réécrire des documents. Pour une vue d'ensemble de l'analyse du XML en PHP, commencez par la vue d'ensemble de SimpleXML.