W3docs

getName()

SimpleXMLElement::getName() gibt den Tag-Namen eines XML-Elements zurück – ein Teil der SimpleXML-Erweiterung in PHP.

Einführung

SimpleXMLElement::getName() gibt den Tag-Namen des XML-Elements zurück, auf dem sie aufgerufen wird – nicht den Textinhalt, nicht einen Klassennamen. Sie ist Teil von SimpleXML, der leichtgewichtigen PHP-Erweiterung zum Lesen und Bearbeiten von XML mit einfacher Objektsyntax.

Diese Seite behandelt die Methodensignatur, ein ausführbares Beispiel, das Verhalten von getName() bei Namespaces und Schleifen sowie häufige Fallstricke.

Syntax

public SimpleXMLElement::getName(): string

Die Methode nimmt keine Argumente entgegen und gibt einen string zurück, der den lokalen Namen des Elements enthält. Das führende < und >, etwaige Attribute sowie die untergeordneten Knoten des Elements werden ignoriert – man erhält nur den Tag-Namen.

Grundlegendes Beispiel

php— editable, runs on the server

$xml zeigt auf das Root-Element <book>, daher gibt $xml->getName() book zurück. Beim Einsteigen in das untergeordnete Element title und dem Aufruf von getName() wird title zurückgegeben. Beachte: getName() liefert den Tag-Namen, während (string) $xml->title den Textinhalt PHP Basics liefern würde.

Wann ist es sinnvoll

Normalerweise kennt man die Elementnamen im Voraus – warum also zur Laufzeit danach fragen? getName() ist am nützlichsten, wenn man über Kindelemente iteriert, deren Namen man nicht kontrolliert – zum Beispiel beim Durchlaufen einer gemischten Liste von Datensätzen oder beim Erstellen eines generischen XML-zu-Array-Konverters.

<?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

Hier kodiert die Schleife weder book noch magazine fest; getName() teilt mit, was jeder Knoten ist, während man ihn besucht. Kombiniere es mit children(), um einen Baum zu durchlaufen, und mit attributes(), um die Attribute jedes Elements zu lesen.

Namespaces

Bei einem Element in einem XML-Namespace gibt getName() den lokalen Namen ohne das Präfix zurück. Das folgende Beispiel verwendet getName() zusammen mit getNamespaces(), um den vollständigen Kontext wiederherzustellen.

<?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

Wenn man nur getName() aufruft, geht das Präfix h: verloren – daher sollte man den Namespace separat abfragen, wenn das Präfix von Bedeutung ist.

Häufige Fallstricke

  • Es ist eine Methode, keine Eigenschaft. Schreibe $el->getName() mit Klammern, nicht $el->getName.
  • Es wird der Tag zurückgegeben, nicht der Wert. Verwende (string) $el oder $el->__toString() für den Text innerhalb des Elements.
  • Leere Selektionen. Beim Zugriff auf ein nicht vorhandenes Kindelement wird trotzdem ein SimpleXMLElement zurückgegeben, und getName() gibt dafür einen leeren string zurück, anstatt einen Fehler zu werfen – prüfe bei Bedarf zunächst mit count().
  • Laden aus einem string/einer Datei. Elemente können mit simplexml_load_string() oder simplexml_load_file() erstellt werden; beide geben Objekte zurück, auf denen getName() auf gleiche Weise funktioniert.

Fazit

SimpleXMLElement::getName() gibt den Tag-Namen eines XML-Elements mit sauberer Objektsyntax zurück. Sie ist besonders nützlich, wenn man XML verarbeitet, dessen Struktur man nicht im Voraus kennt – kombiniere sie mit children(), attributes() und asXML(), um Dokumente zu lesen und umzuschreiben. Für einen umfassenderen Überblick über das Parsen von XML in PHP beginne mit der SimpleXML-Übersicht.

Übungen

Übung
Was gibt SimpleXMLElement::getName() zurück?
Was gibt SimpleXMLElement::getName() zurück?
Was this page helpful?