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(): stringIl 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
$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: SQLQui 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()); // hSe 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) $elo$el->__toString()per il testo all'interno dell'elemento. - Selezioni vuote. Accedere a un figlio che non esiste restituisce comunque un
SimpleXMLElement, egetName()su di esso restituisce una stringa vuota anziché generare un'eccezione — verificare concount()prima se necessario. - Caricamento da string/file. Costruire elementi con
simplexml_load_string()osimplexml_load_file(); entrambi restituiscono object su cuigetName()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.