2011-10-24 4 views
1

私はBBC News XMLフィードを利用しています。しかし、私がしたいことは、それが8または10の飼料を制限することです。XMLフィードとPHP - アイテム数を制限する

どうすればこの問題を解決できますか?

私のコードは次のとおりです。

<?php 

    $doc = new DOMDocument(); 
    $doc->load('http://feeds.bbci.co.uk/news/rss.xml'); 
    $arrFeeds = array(); 
    foreach ($doc->getElementsByTagName('item') as $node) { 
    $itemRSS = array ( 
     'title' => $node->getElementsByTagName('title')->item(0)->nodeValue, 
     'desc' => $node->getElementsByTagName('description')->item(0)->nodeValue, 
     'link' => $node->getElementsByTagName('link')->item(0)->nodeValue, 
     'date' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue 
    ); 
?> 

<h2><a href="<?php echo $itemRSS['link'] ;?>"><?php echo $itemRSS['title']; ?></a></h2> 
<?php } ?> 

事前に感謝..

答えて

5

は、反復ごとに1カウンタ変数、増分を取り、カウンタが上限に達しているかどうかを確認してから出口からループ。

$cnt=0; 
foreach ($doc->getElementsByTagName('item') as $node) { 
    if($cnt == 8) { 
     break; 
    }  
    $itemRSS = array ( 
     'title' => $node->getElementsByTagName('title')->item(0)->nodeValue, 
     'desc' => $node->getElementsByTagName('description')->item(0)->nodeValue, 
     'link' => $node->getElementsByTagName('link')->item(0)->nodeValue, 
     'date' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue 
    ); 
     $cnt++; 
?>  
<h2><a href="<?php echo $itemRSS['link'] ;?>"><?php echo $itemRSS['title']; ?></a></h2> 
<?php 
} ?> 
+0

0から始まって底が増えているので、9が得られませんか? –

+0

@RyanMatthews:そうです。私はちょうどそれがいかにできるかの例を示した。 –

+0

@ ShaktiSinghはそれをありがとうございました。私はカウントvarを見ていた、ちょうど間違った場所にあった..完璧な答え、ありがとう。 – StuBlackett

7

XPathを使用すると、RSSフィードのサブセットを簡単に取得できます。

$itemCount = 10; 
$xml = simplexml_load_file('http://feeds.bbci.co.uk/news/rss.xml'); 
$items = $xml->xpath(sprintf('/rss/channel/item[position() <= %d]', $itemCount)); 
foreach ($items as $i) { 
    $itemRSS = array ( 
     'title' => (string)$i->title, 
     'desc' => (string)$i->description, 
     'link' => (string)$i->link, 
     'date' => (string)$i->pubDate 
    ); 
} 

あなたはSimpleXMLオブジェクトによってDOMオブジェクトを交換することにより、もう少し軽量で - とXPathは(私はこの例では、それを使用する理由です)SimpleXMLで使用する方がはるかに簡単です。同じことは、そのようなDOMで達成することができます:

$doc = new DOMDocument(); 
$doc->load('http://feeds.bbci.co.uk/news/rss.xml'); 
$xpath = new DOMXpath($doc); 
$items = $xpath->query(sprintf('/rss/channel/item[position() <= %d]', $itemCount)); 
foreach ($items as $i) { 
    // ... 
} 
+0

私はこの方法が好きであり、将来それを使用することは間違いありません。どうもありがとう! – StuBlackett

2

あなたはSimpleXmlでそれを行うと、あなたもarray_sliceを使用することができます。

$rss = simplexml_load_file('http://feeds.bbci.co.uk/news/rss.xml'); 
$items = $rss->xpath('/rss/channel/item'); 
$startAtItem = 0; 
$numberOfItems = 9; 
$firstTenItems = array_slice($items, $startAtItem, $numberOfItems); 

またはLimitIteratorと:

$rss = simplexml_load_file('http://feeds.bbci.co.uk/news/rss.xml'); 
$items = $rss->xpath('/rss/channel/item'); 
$startAtItem = 0; 
$numberOfItems = 9; 
$firstTenItems = new LimitIterator(
    new ArrayIterator($items), $startAtItem, $numberOfItems 
); 
foreach ($firstTenItems as $item) { … 

詳細しかし、このサイトの他の場所ではXPath position()ソリューションが提供されています。

関連する問題