PHP DOMDocument получение атрибута тега

Привет у меня есть ответ api в формате xml с рядом элементов, таких как это:

<item>
<title>blah balh</title>
<pubDate>Tue, 20 Oct 2009 </pubDate>
<media:file  date="today" data="example text string"/>
</item>

Я хочу использовать DOMDocument для получения атрибута " data "из тега"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.

2 ответов


приведенный пример не должен генерировать ошибку. Я протестировал его, и $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;