getName()
SimpleXMLElement::getName() возвращает имя тега XML-элемента. Синтаксис, примеры, пространства имён и типичные ошибки.
Введение
SimpleXMLElement::getName() возвращает имя тега XML-элемента, для которого вызывается метод — не текстовое содержимое и не имя класса. Метод входит в состав SimpleXML — лёгкого PHP-расширения для чтения и редактирования XML с помощью обычного объектного синтаксиса.
На этой странице описаны сигнатура метода, рабочий пример, поведение getName() при работе с пространствами имён и в циклах, а также типичные ошибки.
Синтаксис
public SimpleXMLElement::getName(): stringМетод не принимает аргументов и возвращает string с локальным именем элемента. Открывающий < и закрывающий >, атрибуты и дочерние узлы элемента полностью игнорируются — возвращается только имя тега.
Простой пример
$xml указывает на корневой элемент <book>, поэтому $xml->getName() возвращает book. Обращение к дочернему элементу title и вызов getName() вернут title. Обратите внимание: getName() возвращает имя тега, тогда как (string) $xml->title вернёт текстовое содержимое — PHP Basics.
Когда использовать
Обычно имена элементов известны заранее — зачем тогда запрашивать их во время выполнения? getName() наиболее полезен, когда вы перебираете дочерние элементы с заранее неизвестными именами — например, обходите смешанный список записей или строите универсальный конвертер XML в 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Здесь цикл не содержит жёстко заданных имён book или magazine; getName() сообщает, что представляет каждый узел по мере его обхода. Комбинируйте этот метод с children() для обхода дерева и attributes() для чтения атрибутов элементов.
Пространства имён
Для элемента в пространстве имён XML getName() возвращает локальное имя без префикса. В примере ниже getName() используется вместе с getNamespaces() для получения полного контекста.
<?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Если вызывать только getName(), префикс h: будет утерян — запрашивайте пространство имён отдельно, если префикс важен.
Типичные ошибки
- Это метод, а не свойство. Пишите
$el->getName()со скобками, а не$el->getName. - Возвращается тег, а не значение. Для получения текста внутри элемента используйте
(string) $elили$el->__toString(). - Пустые выборки. Обращение к несуществующему дочернему элементу всё равно возвращает
SimpleXMLElement, аgetName()на нём вернёт пустую string вместо исключения — используйтеcount()для проверки, если это важно. - Загрузка из строки или файла. Создавайте элементы с помощью
simplexml_load_string()илиsimplexml_load_file(); оба возвращают object, для которогоgetName()работает одинаково.
Заключение
SimpleXMLElement::getName() возвращает имя тега XML-элемента с помощью чистого объектного синтаксиса. Метод особенно удобен при обработке XML со структурой, неизвестной заранее — комбинируйте его с children(), attributes() и asXML() для чтения и преобразования документов. Для общего понимания разбора XML в PHP начните с обзора SimpleXML.