Как получить первое изображение из файла ramlbr rss в PHP

0 Вот соответствующая часть моего rss-канала:

<channel> <description></description> <title>Untitled</title> <generator>Tumblr (3.0; @xxx)</generator> <link>http://xxx.tumblr.com/</link> <item> <title>Title</title> <description>&lt;figure&gt;&lt;img src="http://img.ruphp.com/php/tumblr_inline_nkp9z234d0uj.jpg"/&gt;&lt;/figure&gt;</description> <link>http://xxx.tumblr.com/post/99569244093</link> <guid>http://xxx.tumblr.com/post/99569244093</guid> <pubDate>Thu, 09 Oct 2014 11:19:33 -0400</pubDate> </item> </channel> 

Используя ответ от других вопросов здесь, я попробовал это:

 $content = file_get_contents("http://xxx.tumblr.com/rss"); $feed = new SimpleXmlElement($content); $imgs = $feed->channel->item[0]->description->xpath('//img'); foreach($imgs as $image) { echo (string)$image['src']; }; 

Это возвращает пустой массив для $imgs

Имеет ли он что-то общее с тегами, &lt; &gt; и т.д?

и если да, что я могу сделать?

Вы можете получить его из описания, которое, как представляется, содержит тег изображения HTML для изображения, с помощью простого регулярного выражения с preg_match :

 $content = file_get_contents("http://xxx.tumblr.com/rss"); $feed = new SimpleXmlElement($content); $img = (string)$feed->channel->item[0]->description; if (preg_match('/src="(.*?)"/', $img, $matches)) { $src = $matches[1]; echo "src = $src", PHP_EOL; } 

Вывод:

 src = http://img.ruphp.com/php/tumblr_nk0mwfhKXU1sl87kjo1_500.jpg 

Прежде чем вы сможете использовать xapth() в описании, вам нужно создать из него новый XML-документ:

 $url = "http://xxx.tumblr.com/rss"; $desc = simplexml_load_file($url)->xpath('//item/description[1]')[0]; $src = simplexml_load_string("<x>$desc</x>")->xpath('//img/@src')[0]; echo $src; 

Вывод:

 http://img.ruphp.com/php/tumblr_nk0mwfhKXU1sl87kjo1_500.jpg 

Я не уверен, что вы можете использовать этот подход – как уже упоминалось kjhughes в качестве комментария, ваш XML-вход не содержит никакого элемента img . Но можно получить источник изображения с помощью подстрочных функций XPath:

 substring-before(substring-after(substring-after(//item/description[contains(.,'img')], 'src='),'"'),'"') того, как substring-before(substring-after(substring-after(//item/description[contains(.,'img')], 'src='),'"'),'"') 

Результат:

 http://img.ruphp.com/php/tumblr_inline_nkp9z234d0uj.jpg