Пытаться анализировать только изображения из RSS-ленты

Во-первых, я новичок php. Я рассмотрел вопрос и решение здесь . Тем не менее, для моих потребностей разбор не углубляется в различные статьи.

Небольшая выборка моего rss-канала читается следующим образом:

<channel> <atom:link href="http://mywebsite.com/rss" rel="self" type="application/rss+xml" /> <title>My Web Site</title> <description>My Feed</description> <link>http://mywebsite.com/</link> <image> <url>http://mywebsite.com/views/images/banner.jpg</url> <title>My Title</title> <link>http://mywebsite.com/</link> <description>Visit My Site</description> </image> <item> <title>Article One</title> <guid isPermaLink="true">http://mywebsite.com/details/e8c5106</guid> <link>http://mywebsite.com/geturl/e8c5106</link> <comments>http://mywebsite.com/details/e8c5106#comments</comments> <pubDate>Wed, 09 Jan 2013 02:59:45 -0500</pubDate> <category>Category 1</category> <description> <![CDATA[<div> <img src="http://mywebsite.com/myimages/1521197-main.jpg" width="120" border="0" /> <ul><li>Poster: someone's name;</li> <li>PostDate: Tue, 08 Jan 2013 21:49:35 -0500</li> <li>Rating: 5</li> <li>Summary:Lorem ipsum dolor </li></ul></div><div style="clear:both;">]]> </description> </item> <item>.. 

Связи изображений, которые я хочу разобрать, – это путь внутри каждого элемента > Описание

Код в моем файле php гласит:

  <?php $xml = simplexml_load_file('http://mywebsite.com/rss?t=2040&dl=1&i=1&r=ceddfb43483437b1ed08ab8a72cbc3d5'); $imgs = $xml->xpath('/item/description/img'); foreach($imgs as $image) { echo $image->src; } ?> 

Может кто-то, пожалуйста, помогите мне выяснить, как настроить php-код выше?

Также очень новичок вопрос … как только я получаю результирующие URL-адреса изображений, как я могу отображать изображения в строке на моем html?

Большое спасибо!!!

Эрнандо

Теги <img> внутри этого RSS-канала на самом деле не являются элементами XML-документа, в отличие от подсветки синтаксиса на этом сайте – это всего лишь текст внутри элемента <description> который содержит символы < и > .

Строка <![CDATA[ сообщает парсеру XML, что все оттуда до тех пор, пока она не встречается ]]> должна рассматриваться как необработанная строка, независимо от того, что она содержит. Это полезно для встраивания HTML внутри XML, поскольку HTML-теги не обязательно будут действительными XML. Это эквивалентно экранированию всего HTML (например, с помощью htmlspecialchars ), так что теги <img> будут выглядеть как &lt;img&gt; , (Я пошла в более подробную техническую информацию о другом ответе ).

Поэтому для извлечения изображений из RSS требуется два шага: сначала получите текст каждого <description> , а во-вторых, найдите все теги <img> в этом тексте.

 $xml = simplexml_load_file('http://mywebsite.com/rss?t=2040&dl=1&i=1&r=ceddfb43483437b1ed08ab8a72cbc3d5'); $descriptions = $xml->xpath('//item/description'); foreach ( $descriptions as $description_node ) { // The description may not be valid XML, so use a more forgiving HTML parser mode $description_dom = new DOMDocument(); $description_dom->loadHTML( (string)$description_node ); // Switch back to SimpleXML for readability $description_sxml = simplexml_import_dom( $description_dom ); // Find all images, and extract their 'src' param $imgs = $description_sxml->xpath('//img'); foreach($imgs as $image) { echo (string)$image['src']; } } 

У меня нет большого опыта работы с xPath, но вы можете попробовать следующее:

 $imgs = $xml->xpath('item//img'); 

Это выберет все img элементы, которые находятся внутри item , независимо от того, есть ли другие элементы между ними. Удаление ведущей косой черты будет искать item любом месте документа, а не только от корня. В противном случае вам понадобится что-то вроде /rss/channel/item...

Что касается отображения изображений: просто выведите <img> -tags, за которыми следуют разрывы строк, например:

 foreach($imgs as $image) { echo '<img src="' . $image->src . '" /><br />'; } 

Предпочтительным способом было бы использовать CSS вместо «-tags», но я думаю, что они проще для начала.