2013-12-21 45 views
0

我試圖從SimpleXML對象的格式,但它的返回:格式化SimpleXML的對象是錯誤的

title1title2title3<a href=""></a> 

即使這是...

return '<a href="'.$url.'">'.$title.'</a>'; 

這裏是我的全部代碼。

<?php 

class ForumFeed { 
    private function getXMLFeeds($feed = 'all') 
    { 
     /* 
      Fetch the XML feeds 
     */ 
     $globalFeedXML = file_get_contents('/forum/syndication.php?limit=3'); 
     $newsFeedXML = file_get_contents('/forum/syndication.php?fid=4&limit=3'); 

     /* 
      Turn feed objects 
     */ 
     $globalFeed = new SimpleXMLElement($globalFeedXML); 
     $newsFeed = new SimpleXMLElement($newsFeedXML); 

     /* 
      Return requested feed 
     */ 
     if ($feed == 'news') { 
      return $newsFeed; 
     } else if ($feed == 'all') { 
      return $globalFeed; 
     } else { 
      return false; 
     } 

    } 
    private function formatFeeds($feed, $node) 
    { 
     /* 
      Format Feeds for displayable content.. 
     */ 
     $getFeedObject = $this->getXMLFeeds($feed); 
     $feedData = $getFeedObject->xpath('channel/item/'.$node); 
     while (list(, $node) = each($feedData)) { 
      echo $node; 
     } 
    } 

    public function feed($feed) 
    { 
     $title = $this->formatFeeds($feed, 'title'); 
     $url = $this->formatFeeds($feed, 'url'); 
     return '<a href="'.$url.'">'.$title.'</a>'; 
    } 
} 

$feeds = new ForumFeed(); 

echo $feeds->feed('all'); 

我不知道我在做什麼錯。

回答

0

的問題是在這個函數:

private function formatFeeds($feed, $node) 
{ 
    /* 
     Format Feeds for displayable content.. 
    */ 
    $getFeedObject = $this->getXMLFeeds($feed); 
    $feedData = $getFeedObject->xpath('channel/item/'.$node); 
    while (list(, $node) = each($feedData)) { 
     echo $node; 
    } 
} 

它呼應$node,而不是返回任何東西給調用者。試試這樣:

private function formatFeeds($feed, $node) 
{ 
    /* 
     Format Feeds for displayable content.. 
    */ 
    $getFeedObject = $this->getXMLFeeds($feed); 
    $feedData = $getFeedObject->xpath('channel/item/'.$node); 
    $result = array(); 
    while (list(, $node) = each($feedData)) { 
     $result[] = $node; 
    } 
    return implode(', ', $result); 
} 
+0

感謝您的回覆!然而,這會導致所有標題包含單個鏈接,應該發生的情況是每個標題都包含一個鏈接 – devs

+0

如果需要,您需要重新設計它。 'formatFeeds'應該返回一個標題數組,並且你在'feed'中循環。或者'formatFeeds'應該包圍每個標題的鏈接,而不是在'feed'中完成。 – Barmar

+0

啊,謝謝,OOP仍然很新鮮,並且試圖圍繞我的課程學習。 – devs