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コードを設定する方法を理解するのを手伝ってもらえますか?

また、非常に初心者の質問です...結果の画像のURLを取得したら、HTMLに画像を連続して表示するにはどうすればよいですか?

どうもありがとう!!!

ヘルナンド

4

2 に答える 2

3

そのRSSフィード内の<img>タグは、このサイトで強調表示されている構文とは異なり、実際にはXMLドキュメントの要素ではありません。<description>要素内のテキストであり、文字<と。が含まれています>

この文字列<![CDATA[は、XMLパーサーに、そこから検出されるまでのすべてが、]]>含まれているものに関係なく、生の文字列として扱われることを通知します。HTMLタグは必ずしも有効なXMLであるとは限らないため、これはXML内にHTMLを埋め込む場合に役立ちます。これは、タグがのように見えるように、HTML全体(たとえば、を使用htmlspecialchars)をエスケープすることと同じです。(私は別の答えについてより技術的な詳細に入りました。)<img>&lt;img&gt;

したがって、RSSから画像を抽出するには、2つの手順が必要です。まず、各のテキストを取得し、次に、そのテキスト内<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内にあるすべての-elementsが選択されます。item先頭のスラッシュを削除するとitem、ルートからだけでなく、ドキュメント内の任意の場所が検索されます。それ以外の場合は、のようなものが必要になります/rss/channel/item...

画像の表示について:次の<img>ように、-tagsの後に改行を出力するだけです。

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

-tagsの代わりにCSSを使用するのが好ましい方法ですが、最初はCSSの方<br>が簡単だと思います。

于 2013-01-09T21:37:00.990 に答える