Uncaught Error: Call to a member function attributes() on null

186
07 октября 2018, 18:00

Есть xml:

<metadata xmlns="http://musicbrainz.org/ns/mmd-2.0#" xmlns:ns2="http://musicbrainz.org/ns/ext#-2.0" created="2018-08-01T18:05:33.207Z">
    <recording-list count="1712634" offset="0">
    ...

Пытаюсь получить доступ к значению атрибута count:

$xml_workflow = new SimpleXMLElement($xml);
$releases_found = intval($xml_workflow->metadata->{'recording-list'}->attributes()['count']);

Но получаю ошибку:

PHP Fatal error: Uncaught Error: Call to a member function attributes() on null

Что не так в моём коде? Атрибуты же есть у xml-элемента.

Answer 1

В вашей строке имеется лишний элемент metadata:

intval($xml_workflow->metadata->{'recording-list'}->attributes()['count']);

Поэтому стоит записать так:

$releases_found = (int) $xml_workflow->{'recording-list'}->attributes()['count'];
Answer 2

Что не так в моём коде?

Походу да

// Для примера взята строка XML следующего содержания
$string = <<<XML
<metadata xmlns="http://musicbrainz.org/ns/mmd-2.0#" xmlns:ns2="http://musicbrainz.org/ns/ext#-2.0" created="2018-08-01T18:05:33.207Z">
    <recording-list count="1712634" offset="0">
    </recording-list>
    </metadata>
XML;
// Загружается из строки
$xml = simplexml_load_string($string);
// Не нужно использовать metadata, просто обратитесь к $xml->{'recording-list'}
foreach($xml->{'recording-list'}->attributes() as $a => $b) {
    echo $a,'="',$b,"\"\n";
}

Результат:

count="1712634"
offset="0"
READ ALSO
Не работает запрос INSERT INTO mysql

Не работает запрос INSERT INTO mysql

INSERT ничего не добавляет в БД при использовании в VALUES переменных, как только я уже не пробовал записывать, не понимаю как всё таки нужноНо работает...

164
Конвертировать файл DOC to PDF libreoffice-core

Конвертировать файл DOC to PDF libreoffice-core

Всем добрый день! У меня встала задача, выводить на сайте файлы DOC в виде PDFИсходный файл DOC храниться в базе данных в виде бинарного кода

173
Линковщик не хочет лнковать

Линковщик не хочет лнковать

Линковщик выдаёт ошибку undefined reference to '_imp__lib_test@8'Если использовать nm то можно найти что в библиотеке есть функция _imp__lib_test но она без @8

167
оптимизация записи в STL вектор

оптимизация записи в STL вектор

У меня какая-то странная ситуация, которую никак не могу понять

171