W3docs

getNamespaces()

Aprende cómo getNamespaces() de PHP devuelve los espacios de nombres en alcance para un elemento XML, con sintaxis, ejemplo ejecutable y diferencias con getDocNamespaces().

Introducción

SimpleXML es una extensión de PHP que proporciona una API sencilla y orientada a objetos para leer documentos XML. Cuando un documento XML utiliza espacios de nombres — por ejemplo <bk:title> donde bk está vinculado a una URI — a menudo necesitas saber qué espacios de nombres declara o hereda un determinado elemento. El método SimpleXMLElement::getNamespaces() responde exactamente esa pregunta: devuelve los espacios de nombres que están en alcance para un elemento. Este artículo explica su sintaxis, muestra un ejemplo ejecutable y aclara cómo se diferencia del relacionado getDocNamespaces().

Entendiendo la función SimpleXMLElement::getNamespaces()

getNamespaces() devuelve un array asociativo de los espacios de nombres utilizados en un elemento — es decir, los prefijos (y el espacio de nombres predeterminado, indexado por una cadena vacía) que realmente se aplican al nodo y, opcionalmente, a sus descendientes. La sintaxis sigue el formato oficial del manual de PHP:

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

Aquí, $recursive es opcional. Cuando se deja en su valor predeterminado false, el método reporta solo los espacios de nombres en uso en el elemento actual. Cuando se establece en true, también recorre los hijos del elemento e incluye cualquier espacio de nombres que estos utilicen. El array devuelto mapea cada prefijo a su URI de espacio de nombres.

Vale la pena contrastar dos métodos similares:

  • getNamespaces() devuelve los espacios de nombres que son realmente utilizados por el elemento (y opcionalmente sus hijos).
  • getDocNamespaces() devuelve cada espacio de nombres declarado en el documento, esté o no en uso.

Ejemplo de uso

Veamos un ejemplo para entender cómo funciona SimpleXMLElement::getNamespaces() en PHP:

php— editable, runs on the server

En el ejemplo anterior, creamos un SimpleXMLElement a partir de un elemento <book> cuyo hijo <bk:title> utiliza el espacio de nombres bk vinculado a https://example.com/books. Al pasar true a getNamespaces() el método recurre en los hijos, por lo que el espacio de nombres bk utilizado por <bk:title> queda incluido. Luego iteramos sobre el array devuelto e imprimimos cada prefijo junto con su URI. La salida es:

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

Si hubiéramos llamado a getNamespaces(false) en su lugar, el array estaría vacío aquí, porque el elemento raíz <book> en sí mismo no utiliza el prefijo bk — solo lo hace su hijo.

Conclusión

El método SimpleXMLElement::getNamespaces() es una herramienta específica para descubrir qué espacios de nombres están realmente en alcance para un elemento. Úsalo (con $recursive = true) cuando quieras los espacios de nombres en los que un elemento y sus hijos se apoyan, y recurre a getDocNamespaces() cuando necesites todos los espacios de nombres declarados en el documento. Para aprender a consultar nodos con espacio de nombres una vez que conoces sus prefijos, consulta registerXPathNamespace().

Práctica

Práctica
¿Qué devuelve SimpleXMLElement::getNamespaces()?
¿Qué devuelve SimpleXMLElement::getNamespaces()?
Was this page helpful?