2014-07-17 32 views
0

我有過想循環的XML提要,並顯示它的所有子元素,但由於某些原因,我只能輸出第一,SimpleXML的迭代只輸出第一個子元素

飼料 -

SimpleXMLElement Object 
(
    [title] => Lorem Ipsum 
    [description] => Overall description 
    [link] => http://someurl.com 
    [pubDate] => Thu, 17 Jul 2014 10:49:09 +0000 
    [ttl] => 123 
    [item] => Array 
     (
      [0] => SimpleXMLElement Object 
       (
        [title] => Lorem Ipsum Dolor 2 
        [link] => http://someurl.com 
        [description] => SimpleXMLElement Object 
         (
         ) 

        [pubDate] => Thu, 17 Jul 2014 10:49:09 +0000 
        [guid] => http://www.someurl.com 
       ) 

      [1] => SimpleXMLElement Object 
       (
        [title] => Lorem Ipsum Dolor 1 
        [link] => http://someurl.com 
        [description] => SimpleXMLElement Object 
         (
         ) 

        [pubDate] => Thu, 17 Jul 2014 10:24:51 +0000 
        [guid] => http://someurl.com 
       ) 
      ETC 
) 
) 

PHP -

$entries = simplexml_load_file($feed); 

foreach ($entries as $entry) { 
    echo $entry->item->description; 
} 

不幸的是我可以在不影響飼料的結構,所以我需要以某種方式能夠重複下來,並在項目元素開始我的循環。想法?

回答

1

SimpleXML可能看起來很神奇,但它並不神奇,因此您不必調整它以匹配您正在閱讀的XML。

你的問題包含了自己的答案在這裏的胚芽:

不幸的是我可以在不影響飼料的結構,所以我需要以某種方式能夠重複下來,並在項目開始我的循環元件。想法?

你所尋找的無非是嵌套循環複雜得多:你描述的從什麼(有沒有在這個問題很多細節)你有多個「條目」,每個都包含多個「項目」。因此,在您現有的條目循環中,您需要依次使用另一個foreach循環來訪問每個item

$entries = simplexml_load_file($feed); 

foreach ($entries as $entry) { 
    foreach ($entry->item as $item) { 
     echo $item->description; 
    } 
} 

注意,如果你有$entry->item->description,這是返回的第一個節點; SimpleXML允許您將其寫成$entry->item[0]->description的簡寫 - 即帶有該名稱的第一個孩子。現在重複,$entry->item將代替所有具有該名稱的兒童的列表,其中每個兒童將依次被指派給$item

+0

讓它工作,謝謝!還有很好的解釋。 –