如何在php中使用rss时访问元素的属性

时间:2015-05-29 14:06:38

标签: php xml twitter-bootstrap rss

我正在使用RSS-feed来显示一些新闻。但问题是我使用bootstrap并且RSS-feed发送的图像我无法弄清楚如何访问,所以我可以推送class="img-responsive"。现在这些图像适合屏幕..

当我从RSS-feed收集元素时的PHP代码:

<?php
    $q=$_GET["q"];

    $xml=("https://www.gamereactor.se/rss/rss.php?texttype=4");

    $xmlDoc = new DOMDocument();
    $xmlDoc->load($xml);

    $channel=$xmlDoc->getElementsByTagName('channel')->item(0);
    $channel_title = $channel->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
    $channel_desc = $channel->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;
    $channel_desc = $channel->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;

    echo("<br>");
    echo($channel_desc."</p>");

    $x=$xmlDoc->getElementsByTagName('item');
    for ($i=0; $i<=2; $i++) {$item_title=$x->item($i)->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
    $item_link=$x->item($i)->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue;
    $item_desc=$x->item($i)->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;
    echo ("<p><a href='".$item_link."'>".$item_title."</a>");
    echo ("<br>");
    echo ($item_desc);
    echo ("<img class=img-responsive>".$item_desc."<img></p>");} //where im trying to access the image..

 ?>

这与RSS-feed中的xml有关:

<title>Nya Need for Speed kommer att kräva internetuppkoppling</title>
<description>&lt;img src=&quot;http://www.gamereactor.dk/media/55/_1455534.jpg&quot;&gt;&lt;p&gt;Svenska Ghost Games pillar för fullt med kommande Need for Speed som ska släppas till PC, Playstation 4 och Xbox One den 3:e november. Förutom att vi tidigare rapporterat...&lt;/p&gt;</description>

1 个答案:

答案 0 :(得分:0)

问题在于您获得的数据。查看XML时,您将看到:

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media= "http://search.yahoo.com/mrss/">
<channel>
    <atom:link href="http://www.gamereactor.se/rss/rss.php?texttype=4" rel="self" type="application/rss+xml" />
    <title>Gamereactor Sverige Nyheter</title>
    <link>http://www.gamereactor.se</link>
    <description>Dagsfärska nyheter, tunga artiklar, intervjuer, personliga bloggar, intressanta forumdiskussioner och rättvisa recensioner. Gamereactor är Sveriges största speltidning- och spelcommunity</description>
    <webMaster>kenneth.gant@gamereactor.dk (Kenneth Gant)</webMaster>
    <item>
        <link>http://www.gamereactor.se/nyheter/244164/Alla+f%F6rhandsbokningsbonusar+till+Arkham+Knight/?rs=rss</link>
        <guid>http://www.gamereactor.se/nyheter/244164/?rs=rss</guid>
        <title>Alla förhandsbokningsbonusar till Arkham Knight</title>
        <description>&lt;img src=&quot;http://www.gamereactor.dk/media/28/framtidensbatman_1102834.jpg&quot;&gt;&lt;p&gt;En flitig Reddit-besökare har tagit på sig att lista var och till vilket format du bör reservera Batman: Arkham Knight för att få den förhandsbokningsbonus just du vill...&lt;/p&gt;</description>
        <author>jonas@gamereactor.se (Jonas Mäki)</author>
        <pubDate>Fri, 29 May 2015 19:44:54 +0200</pubDate>
    </item>

因此IMG标记位于描述中并进行编码。因此,以下行将详细说明:

$item_desc=$x->item($i)->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;

要在页面中将其用作HTML,我们希望这样做:

$item_desc=html_entity_decode($x->item($i)->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue);

$item_desc现在将包含:<img src="http://www.gamereactor.dk/media/28/framtidensbatman_1102834.jpg"><p>En flitig Reddit-besökare har tagit på sig att lista var och till vilket format du bör reservera Batman: Arkham Knight för att få den förhandsbokningsbonus just du vill...</p>

<?php
    $q=$_GET["q"];

    $xml=("https://www.gamereactor.se/rss/rss.php?texttype=4");

    $xmlDoc = new DOMDocument();
    $xmlDoc->load($xml);

    $channel=$xmlDoc->getElementsByTagName('channel')->item(0);
    $channel_title = $channel->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
    $channel_desc = $channel->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;
    $channel_desc = $channel->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;

    echo("<br>");
    echo($channel_desc."</p>");

    $x=$xmlDoc->getElementsByTagName('item');
    for ($i=0; $i<=2; $i++){
        $item_title=$x->item($i)->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
        $item_link=$x->item($i)->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue;
        $item_desc=html_entity_decode($x->item($i)->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue);
        echo ("<p><a href='".$item_link."'>".$item_title."</a>");
        echo ("<br>");
        echo ($item_desc);
    }

 ?>