2010-10-27 91 views
2

我有一個SimpleXMLElement,我使用curl在XML文件中讀取它。 試圖從中獲得值我似乎需要使用嵌套的foreach,但在類似的情況下,我能夠一次完成這項工作。現在我真的好奇爲什麼這不起作用:循環SimpleXMLElement對象只能在兩個步驟中工作

它的美味的RSS提要;

SimpleXMLElement Object 
(
    [title] => Delicious/chrisvdberge 
    [link] => http://www.delicious.com/chrisvdberge 
    [description] => bookmarks posted by chrisvdberge 
    [item] => Array 
     (
      [0] => SimpleXMLElement Object 
       (
        [title] => Diagrammr 
        [pubDate] => Thu, 06 May 2010 12:40:07 +0000 
        [guid] => http://www.delicious.com/url/2fc2ed0e870ec9d001b645dfaed0e771#chrisvdberge 
        [link] => http://www.diagrammr.com/ 
        [comments] => http://www.delicious.com/url/2fc2ed0e870ec9d001b645dfaed0e771 
        [source] => chrisvdberge's bookmarks 
        [category] => Array 
         (
          [0] => tagthis 
          [1] => visualization 
          [2] => diagrams 
         ) 

       ) 

      [1] => SimpleXMLElement Object 
       (
        [title] => Ignite Toronto 2: Ryan Coleman - Designing for visual efficiency on Vimeo 
        [pubDate] => Mon, 18 Jan 2010 08:05:06 +0000 
        [guid] => http://www.delicious.com/url/9a0de307f3f37baaa25ad20b4dbc4537#chrisvdberge 
        [link] => http://vimeo.com/8317770 
        [comments] => http://www.delicious.com/url/9a0de307f3f37baaa25ad20b4dbc4537 
        [source] => chrisvdberge's bookmarks 
        [category] => Array 
         (
          [0] => tagthis 
          [1] => vizthink 
         ) 

       ) 

我可以用嵌套的foreach訪問的所有鏈接:

foreach ($delicious_res as $item) { 
    foreach ($item->item as $entry){ 
     echo $entry->link."<br />"; 
    } 
} 

但我不明白爲什麼我不能用這個(我可以在另一種情況)

foreach ($delicious_res->item as $item) { 
     echo $entry->link."<br />"; 
} 

我真的很想明白爲什麼爲了更好地理解SimpleXML;)

回答

1

你必須使用:

foreach($delicious_res->channel->item as $item) { 
    print_r($item); 
} 

由於項目的集合是<rss><channel>標籤內(可能因爲它是文檔的根節點可以省略<rss>標籤)。

另一個說明:如果您沒有做任何特別的事情,那麼您可能不需要使用curl來獲取rss feeds xml內容。只需使用simplexml_load_file並將url作爲參數:

$delicious_res = simplexml_load_file('http://path-to-your/file.xml"'); 
+0

thx很多! Id需要捲曲的「花哨」東西是什麼?並且simplexml_load_file更快? – Chrisvdberge 2010-10-27 18:25:03

+0

@Chrisvdberge那麼,花哨的東西將是e。 G。使用POST請求來獲取數據。使用POST時,您必須使用捲曲。捲曲通常用於執行更復雜的http請求,在你的情況下你可以做得更簡單。性能應該差不多,但代碼讀取更好,而不是許多curl_setopt()調用。 :-) – Max 2010-10-27 18:32:56