1

首先,我是一个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代码吗?

也是一个非常新手的问题......一旦我得到结果图像网址,如何在我的 html 上连续显示图像?

非常感谢!!!

埃尔南多

4

2 回答 2

3

RSS 提要中的<img>标签实际上并不是 XML 文档的元素,这与本网站上突出显示的语法相反 - 它们只是<description>元素内的文本,恰好包含字符<>.

该字符串<![CDATA[告诉 XML 解析器,从那里到遇到的所有内容都]]>将被视为原始字符串,而不管它包含什么。这对于在 XML 中嵌入 HTML 很有用,因为 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'];
    }
}
于 2013-01-11T17:06:36.247 回答
0

我对 xPath 没有太多经验,但您可以尝试以下方法:

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

这将选择所有在 -elementsimg内的item-elements,无论其间是否有其他元素。删除前导斜杠将搜索item文档中的任何位置,而不仅仅是从根。否则,您将需要类似/rss/channel/item....

至于显示图像:只需输出<img>-tags 后跟换行符,如下所示:

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

首选方法是使用 CSS 而不是<br>-tags,但我认为它们一开始更简单。

于 2013-01-09T21:37:00.990 回答