W3docs

getName()

SimpleXMLElement::getName() restituisce il nome del tag dell'elemento XML su cui viene chiamato. Parte dell'estensione SimpleXML di PHP.

Introduzione

SimpleXMLElement::getName() restituisce il nome del tag dell'elemento XML su cui viene chiamato — non il suo contenuto testuale, non il nome di una classe. Fa parte di SimpleXML, la leggera estensione PHP per leggere e modificare XML con la sintassi degli oggetti.

Questa pagina tratta la firma del metodo, un esempio eseguibile, il comportamento di getName() con i namespace e i cicli, e le insidie più comuni.

Sintassi

public SimpleXMLElement::getName(): string

Il metodo non accetta argomenti e restituisce una string contenente il nome locale dell'elemento. Il < e > iniziali, eventuali attributi e i nodi figli dell'elemento vengono tutti ignorati — si ottiene solo il nome del tag.

Esempio di base

php— editable, runs on the server

$xml punta all'elemento radice <book>, quindi $xml->getName() restituisce book. Accedendo al figlio title e chiamando getName() si ottiene title. Si noti che getName() restituisce il nome del tag, mentre (string) $xml->title restituirebbe il contenuto testuale, PHP Basics.

Perché usarlo

Di solito i nomi degli elementi sono noti in anticipo, quindi perché richiederli a runtime? getName() è più utile quando si itera su figli i cui nomi non si controllano — ad esempio, percorrendo un elenco misto di record o costruendo un convertitore generico da XML ad 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: SQL

Qui il ciclo non codifica in modo fisso book o magazine; getName() indica cosa sia ogni nodo nel momento in cui lo si visita. Abbinarlo a children() per attraversare un albero e a attributes() per leggere gli attributi di ciascun elemento.

Namespace

Per un elemento in un namespace XML, getName() restituisce il nome locale senza il prefisso. L'esempio seguente usa getName() insieme a getNamespaces() per recuperare il contesto completo.

<?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());   // h

Se si chiama solo getName() si perde il prefisso h:, quindi è necessario interrogare il namespace separatamente quando il prefisso è rilevante.

Insidie comuni

  • È un metodo, non una proprietà. Scrivere $el->getName() con le parentesi, non $el->getName.
  • Restituisce il tag, non il valore. Usare (string) $el o $el->__toString() per il testo all'interno dell'elemento.
  • Selezioni vuote. Accedere a un figlio che non esiste restituisce comunque un SimpleXMLElement, e getName() su di esso restituisce una stringa vuota anziché generare un'eccezione — verificare con count() prima se necessario.
  • Caricamento da string/file. Costruire elementi con simplexml_load_string() o simplexml_load_file(); entrambi restituiscono object su cui getName() funziona allo stesso modo.

Conclusione

SimpleXMLElement::getName() restituisce il nome del tag di un elemento XML utilizzando una sintassi degli oggetti pulita. Brilla quando si elabora XML la cui struttura non è nota in anticipo — combinarlo con children(), attributes() e asXML() per leggere e riscrivere documenti. Per una panoramica più ampia del parsing XML in PHP, iniziare dalla panoramica di SimpleXML.

Esercizio

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