W3docs

getNamespaces()

Aprenda como getNamespaces() do PHP retorna os namespaces em escopo para um elemento XML, com sintaxe, exemplo e diferenças de getDocNamespaces().

Introdução

SimpleXML é uma extensão do PHP que fornece uma API simples e orientada a objetos para leitura de documentos XML. Quando um documento XML utiliza namespaces — por exemplo, <bk:title> onde bk está vinculado a uma URI — muitas vezes é necessário saber quais namespaces um determinado elemento declara ou herda. O método SimpleXMLElement::getNamespaces() responde exatamente a essa questão: ele retorna os namespaces que estão em escopo para um elemento. Este artigo explica sua sintaxe, apresenta um exemplo executável e esclarece como ele difere do relacionado getDocNamespaces().

Entendendo a função SimpleXMLElement::getNamespaces()

getNamespaces() retorna um array associativo dos namespaces usados em um elemento — ou seja, os prefixos (e o namespace padrão, indexado por uma string vazia) que realmente se aplicam ao nó e, opcionalmente, aos seus descendentes. A sintaxe segue o formato oficial do manual do PHP:

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

Aqui, $recursive é opcional. Quando mantido no seu valor padrão false, o método reporta apenas os namespaces em uso no elemento atual. Quando definido como true, ele também percorre os filhos do elemento e inclui quaisquer namespaces que eles utilizem. O array retornado mapeia cada prefixo para sua URI de namespace.

Vale contrastar dois métodos semelhantes:

  • getNamespaces() retorna os namespaces que são realmente usados pelo elemento (e opcionalmente por seus filhos).
  • getDocNamespaces() retorna todos os namespaces declarados no documento, sejam eles utilizados ou não.

Exemplo de Uso

Vamos analisar um exemplo para entender como SimpleXMLElement::getNamespaces() funciona em PHP:

php— editable, runs on the server

No exemplo acima, criamos um SimpleXMLElement a partir de um elemento <book> cujo filho <bk:title> usa o namespace bk vinculado a https://example.com/books. Passando true para getNamespaces(), o método percorre os filhos recursivamente, então o namespace bk usado por <bk:title> é incluído. Em seguida, iteramos sobre o array retornado e imprimimos cada prefixo junto com sua URI. A saída é:

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

Se tivéssemos chamado getNamespaces(false) em vez disso, o array estaria vazio aqui, porque o elemento raiz <book> em si não usa o prefixo bk — apenas seu filho o usa.

Conclusão

O método SimpleXMLElement::getNamespaces() é uma ferramenta focada para descobrir quais namespaces estão realmente em escopo para um elemento. Use-o (com $recursive = true) quando quiser os namespaces dos quais um elemento e seus filhos dependem, e recorra ao getDocNamespaces() quando precisar de todos os namespaces declarados no documento. Para aprender como consultar nós com namespace depois de conhecer seus prefixos, veja registerXPathNamespace().

Prática

Prática
O que SimpleXMLElement::getNamespaces() retorna?
O que SimpleXMLElement::getNamespaces() retorna?
Was this page helpful?