Привет, у меня есть ответ api в формате xml с рядом элементов, таких как:
<item> <title>blah balh</title> <pubDate>Tue, 20 Oct 2009 </pubDate> <media:file date="today" data="example text string"/> </item>
Я хочу использовать DOMDocument для получения атрибута «данные» из тега «media: file». Моя попытка ниже не работает:
$xmldoc = new DOMDocument(); $xmldoc->load('api response address'); foreach ($xmldoc->getElementsByTagName('item') as $feeditem) { $nodes = $feeditem->getElementsByTagName('media:file'); $linkthumb = $nodes->item(0)->getAttribute('data'); }
Что я делаю не так? Пожалуйста помоги.
EDIT: Я почему-то не могу оставлять комментарии. Я получаю ошибку
Call to a member function getAttribute() on a non-object
когда я запускаю свой код. Я также пробовал
$nodes = $feeditem->getElementsByTagNameNS('uri','file'); $linkthumb = $nodes->item(0)->getAttribute('data');
где uri – это uri, относящийся к пространству имен носителей (NS), но снова та же проблема.
Обратите внимание, что элемент мультимедиа имеет форму, но я не думаю, что это часть проблемы, поскольку у меня обычно нет синтаксического анализа вопросов для attibutes.
Приведенный пример не должен генерировать ошибку. Я протестировал его, и $ linkthumb содержал строку «примерную текстовую строку», как и ожидалось
Убедитесь, что пространство имен носителей указано в возвращенном XML, иначе DOMDocument выйдет из строя.
Если вы получаете конкретную ошибку, отредактируйте свою запись, чтобы включить ее
Редактировать:
Попробуйте следующий код:
$xmldoc = new DOMDocument(); $xmldoc->load('api response address'); foreach ($xmldoc->getElementsByTagName('item') as $feeditem) { $nodes = $feeditem->getElementsByTagName('file'); $linkthumb = $nodes->item(0)->getAttribute('data'); echo $linkthumb; }
Вы также можете посмотреть на SimpleXML и Xpath, поскольку чтение XML намного проще, чем DOMDocument.
С другой стороны,
$DOMNode -> attributes -> getNamedItem( 'MyAttribute' ) -> value;