W3docs

getNamespaces()

Scopri come getNamespaces() di PHP restituisce i namespace in scope per un elemento XML, con sintassi, esempio eseguibile e differenze da getDocNamespaces().

Introduzione

SimpleXML è un'estensione PHP che fornisce un'API semplice e orientata agli oggetti per leggere documenti XML. Quando un documento XML utilizza i namespace — ad esempio <bk:title> dove bk è associato a una URI — spesso è necessario sapere quali namespace un dato elemento dichiara o eredita. Il metodo SimpleXMLElement::getNamespaces() risponde esattamente a questa domanda: restituisce i namespace che sono in scope per un elemento. Questo articolo ne spiega la sintassi, mostra un esempio eseguibile e chiarisce come si differenzia dal correlato getDocNamespaces().

Comprendere la funzione SimpleXMLElement::getNamespaces()

getNamespaces() restituisce un array associativo dei namespace utilizzati in un elemento — ovvero i prefissi (e il namespace predefinito, con chiave stringa vuota) che si applicano effettivamente al nodo e, facoltativamente, ai suoi discendenti. La sintassi segue il formato ufficiale del manuale PHP:

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

Qui, $recursive è opzionale. Lasciato al valore predefinito false, il metodo riporta solo i namespace in uso sull'elemento corrente. Impostato a true, percorre anche i figli dell'elemento e include i namespace da essi utilizzati. L'array restituito mappa ogni prefisso alla sua URI di namespace.

Vale la pena confrontare due metodi simili:

  • getNamespaces() restituisce i namespace effettivamente utilizzati dall'elemento (e facoltativamente dai suoi figli).
  • getDocNamespaces() restituisce ogni namespace dichiarato nel documento, che sia usato o meno.

Esempio di utilizzo

Vediamo un esempio per capire come funziona SimpleXMLElement::getNamespaces() in PHP:

php— editable, runs on the server

Nell'esempio precedente, creiamo un SimpleXMLElement da un elemento <book> il cui figlio <bk:title> utilizza il namespace bk associato a https://example.com/books. Passando true a getNamespaces() si fa ricorrere il metodo nei figli, quindi il namespace bk usato da <bk:title> viene incluso. Si itera poi sull'array restituito e si stampa ogni prefisso insieme alla sua URI. L'output è:

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

Se avessimo chiamato getNamespaces(false), l'array sarebbe vuoto, perché l'elemento radice <book> non usa il prefisso bk — lo usa solo il suo figlio.

Conclusione

Il metodo SimpleXMLElement::getNamespaces() è uno strumento mirato per scoprire quali namespace sono effettivamente in scope per un elemento. Usalo (con $recursive = true) quando vuoi i namespace su cui un elemento e i suoi figli fanno affidamento, e ricorri a getDocNamespaces() quando hai bisogno di ogni namespace dichiarato nel documento. Per sapere come interrogare i nodi con namespace una volta noti i loro prefissi, consulta registerXPathNamespace().

Esercizio

Pratica
Cosa restituisce SimpleXMLElement::getNamespaces()?
Cosa restituisce SimpleXMLElement::getNamespaces()?
Was this page helpful?