W3docs

getName()

SimpleXMLElement::getName() возвращает имя тега XML-элемента. Синтаксис, примеры, пространства имён и типичные ошибки.

Введение

SimpleXMLElement::getName() возвращает имя тега XML-элемента, для которого вызывается метод — не текстовое содержимое и не имя класса. Метод входит в состав SimpleXML — лёгкого PHP-расширения для чтения и редактирования XML с помощью обычного объектного синтаксиса.

На этой странице описаны сигнатура метода, рабочий пример, поведение getName() при работе с пространствами имён и в циклах, а также типичные ошибки.

Синтаксис

public SimpleXMLElement::getName(): string

Метод не принимает аргументов и возвращает string с локальным именем элемента. Открывающий < и закрывающий >, атрибуты и дочерние узлы элемента полностью игнорируются — возвращается только имя тега.

Простой пример

php— editable, runs on the server

$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.

Практика

Практика
Что возвращает SimpleXMLElement::getName()?
Что возвращает SimpleXMLElement::getName()?
Was this page helpful?