Как проверить, существует ли элемент пространства имен в PHP
Я пытаюсь проверить, существует ли элемент media:content, чтобы миниатюрное изображение можно было показать из RSS-ленты, но не уверен, как проверить его существование.
Я могу получить media:content url и показать изображение в порядке, но проверить, не существует ли оно, не получается. Я попробовал isset и определил, но я явно делаю что-то не так.
Главная линия, о которой я беспокоюсь ниже:
if (определено ($ item-> getElementsByTagNameNS (' http://search.yahoo.com/mrss/', 'content') -> item (0) -> getAttribute ('url')))
<?php
$feed = new DOMDocument();
$feed->load('http://rss.cnn.com/rss/cnn_topstories.rss');
$json = array();
$items = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('item');
$json['item'] = array();
foreach($items as $item) {
$title = $item->getElementsByTagName('title')->item(0)->firstChild->nodeValue;
$description = $item->getElementsByTagName('description')->item(0)->firstChild->nodeValue;
$text = $item->getElementsByTagName('description')->item(0)->firstChild->nodeValue;
if(defined($item->getElementsByTagNameNS('http://search.yahoo.com/mrss/', 'content')->item(0)->getAttribute('url'))){
$image = $item->getElementsByTagNameNS('http://search.yahoo.com/mrss/', 'content')->item(0)->getAttribute('url');
}
else{
$image = '';
}
echo $image;
}
?>
2 ответа
Найджел был прав, используя -> длина - способ сделать это.
if($item->getElementsByTagNameNS('http://search.yahoo.com/mrss/', 'content')->length > 0){
$image = $item->getElementsByTagNameNS('http://search.yahoo.com/mrss/', 'content')->item(0)->getAttribute('url');
}
Когда вы используете getElementsByTagName
, это всегда возвращает DOMNodeList. Главное - проверить, есть ли в списке узлов 0 элементов.
Так что вместо defined()
или же isset()
использовать ->length
...
$nodes=$domDocument->getElementsByTagName('book') ;
if ($nodes->length==0) {
// no results
}
(Пример из http://php.net/manual/en/domdocument.getelementsbytagname.php)