2011-01-18 18 views
0

RSSフィードを変更したいですか?私はフィードからXの項目を削除し、新しいフィードをXMLとして返したいと思います。PHP SimpleXML:フィードの変更

<?php 
class RSS { 
    private $simpleXML; 

    public function __construct($address) { 
     $xml = file_get_contents($address); 
     $this->simpleXML = simplexml_load_string($xml); 
    } 

    private function getRssInformation() { 
     // Here I want to get the Rss Head information ... 
    } 

    // Here I get X items ... 
    private function getItems($itemsNumber, $UTF8) { 
     $xml = null; 
     $items = $this->simpleXML->xpath('/rss/channel/item'); 

     if(count($items) > $itemsNumber) { 
      $items = array_slice($items, 0, $itemsNumber, true); 
     } 

     foreach($items as $item) { 
      $xml .= $item->asXML() . "\n"; 
     } 

     return $xml; 
    } 

    public function getFeed($itemsNumber = 5, $UTF8 = true) { 
     // Here i will join rss information with X items ... 
     echo $this->getItems($itemsNumber, $UTF8); 
    } 
} 
?> 

XPathで可能ですか? ありがとうございます。

+0

すべての項目の設定を解除することができます:unset($ this-> simpleXML-> channel-> item);それは動作します!ありがとうございました。今は新しいアイテムを追加するだけです。 – thom

答えて

0

それを行うための別の方法(しかし、クリーナーすることができる):

private function getItems($itemsNumber, $UTF8) { 
    $xml = '<?xml version="1.0" ?> 
       <rss version="2.0"> 
        <channel>'; 

    $i = 0; 

    if (count($this->simpleXML->rss->channel->item)>0){ 
     foreach ($this->simpleXML->rss->channel->item as $item) { 
      $xml .= str_replace('<?xml version="1.0" ?>', '', $item->asXML()); 
      $i++; 
      if($i==$itemsNumber) break; 
     } 
    } 
    $xml .=' </channel></rss> '; 

    return $xml; 
} 

しかし、私はasXML()だと思います。 XML宣言を追加してください:

<?xml version="1.0" ?> 

私は自分のコードを編集しました。汚いですが、うまくいくはずです。どんな良いアイデア?

+0

大丈夫です。私は完全にあなたの質問を理解していないと思うが、とにかくあなたを助けるようだ:) – Spir