1

php を使用して、画像付きの RSS フィードのリンクを解析しようとしました 。

RSS フィードを解析して、エンクロージャ タグから画像を表示しようとしました。そのリンクにある解決策を試しました。しかし、うまくいきません。element_attributes 関数が定義されていません。

そこで、xPath を使用して画像を取得しようとしました。以下は私の出力です(空の配列):

Array()

私のWebサーバーのエラーログに。

誰かが私が間違っている場所を指摘できますか? ありがとうございました。

<?php
if (function_exists("curl_init")){
    $ch=curl_init();
    curl_setopt($ch,CURLOPT_URL, 'http://menmedia.co.uk/manchestereveningnews/news/rss.xml');
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    //curl_setopt($ch,CURLOPT_HEADER,0);
$data=curl_exec($ch);


curl_close($ch);


$doc=new SimpleXmlElement($data,LIBXML_NOCDATA);

function getImage($xml){
    $imgs=$xml->xPath('rss/channel/enclosure[@attributes]');
    print_r($imgs);
    /*foreach ($imgs as $image){
        echo $image->url;
    }*/
}
if (isset($doc->channel)) getImage($doc);

} ?>

4

3 に答える 3

1

この単一の XPath 式:

/rss/channel/item/enclosure/@*

最上位要素の子enclosureであるすべての要素の子であるすべての要素のすべての属性を選択します。channelrss

これは、以下を使用するよりも単純であり、はるかに効率的です。

//channel/item/enclosure

次に、別の評価で属性を見つけます。

覚えておいてください

//疑似演算子で始まる XPath 式の評価は、通常、特定のパスを使用する場合よりもはるかに遅くなります。これは、最適化されていない XPath プロセッサがドキュメント全体をトラバースするためです。

于 2012-07-14T19:40:22.737 に答える
1

私はそれを働かせました。すべての画像を表示しています。Dimitre が提案したように、「/rss/channel/item/enclosure」から「@*」を除いたものを使用しています。以下は私の機能です:

function getImage($xml){
    $encls=$xml->xPath('/rss/channel/item/enclosure'); 
        foreach($encls as $encl) { 
            print_r('<img src='.$encl->attributes()->url.'/>');
            echo('<br>');
            }

}//end function getImage

君たちありがとう!

于 2012-07-15T00:26:54.910 に答える
1
$imgs=$xml->xPath('//channel/item/enclosure');
foreach($imgs as $img) {
    var_dump($img->attributes());
}
于 2012-07-14T09:32:33.543 に答える