W3docs

getNamespaces()

Découvrez comment getNamespaces() de PHP retourne les espaces de noms actifs d'un élément XML, avec syntaxe, exemple et différences avec getDocNamespaces().

Introduction

SimpleXML est une extension PHP qui fournit une API orientée objet simple pour lire des documents XML. Lorsqu'un document XML utilise des espaces de noms — par exemple <bk:title>bk est lié à un URI — vous avez souvent besoin de savoir quels espaces de noms un élément donné déclare ou hérite. La méthode SimpleXMLElement::getNamespaces() répond exactement à cette question : elle retourne les espaces de noms qui sont en scope pour un élément. Cet article explique sa syntaxe, présente un exemple exécutable et précise comment elle se distingue de la méthode étroitement liée getDocNamespaces().

Comprendre la fonction SimpleXMLElement::getNamespaces()

getNamespaces() retourne un array associatif des espaces de noms utilisés dans un élément — c'est-à-dire les préfixes (et l'espace de noms par défaut, indexé par une chaîne vide) qui s'appliquent réellement au nœud et, éventuellement, à ses descendants. La syntaxe suit le format officiel du manuel PHP :

SimpleXMLElement::getNamespaces ( bool $recursive = false ) : array

Ici, $recursive est facultatif. Laissé à sa valeur par défaut false, la méthode ne rapporte que les espaces de noms utilisés sur l'élément courant. Défini à true, elle parcourt également les enfants de l'élément et inclut tous les espaces de noms qu'ils utilisent. L'array retourné associe chaque préfixe à son URI d'espace de noms.

Il est utile de distinguer deux méthodes similaires :

  • getNamespaces() retourne les espaces de noms qui sont réellement utilisés par l'élément (et éventuellement ses enfants).
  • getDocNamespaces() retourne tous les espaces de noms déclarés dans le document, qu'ils soient utilisés ou non.

Exemple d'utilisation

Voyons un exemple pour comprendre comment SimpleXMLElement::getNamespaces() fonctionne en PHP :

php— editable, runs on the server

Dans l'exemple ci-dessus, nous créons un SimpleXMLElement à partir d'un élément <book> dont l'enfant <bk:title> utilise l'espace de noms bk lié à https://example.com/books. En passant true à getNamespaces(), on demande à la méthode de parcourir récursivement les enfants, de sorte que l'espace de noms bk utilisé par <bk:title> est inclus. Nous itérons ensuite sur l'array retourné et affichons chaque préfixe avec son URI. Le résultat est :

Prefix: bk, URI: https://example.com/books

Si nous avions appelé getNamespaces(false) à la place, l'array serait vide ici, car l'élément racine <book> lui-même n'utilise pas le préfixe bk — seul son enfant l'utilise.

Conclusion

La méthode SimpleXMLElement::getNamespaces() est un outil ciblé pour découvrir quels espaces de noms sont réellement en scope pour un élément. Utilisez-la (avec $recursive = true) lorsque vous souhaitez connaître les espaces de noms utilisés par un élément et ses enfants, et recourez à getDocNamespaces() lorsque vous avez besoin de tous les espaces de noms déclarés dans le document. Pour apprendre à interroger des nœuds avec espaces de noms une fois leurs préfixes connus, consultez registerXPathNamespace().

Pratique

Pratique
Que retourne SimpleXMLElement::getNamespaces() ?
Que retourne SimpleXMLElement::getNamespaces() ?
Was this page helpful?