2010-04-13 64 views
0

我的代碼沒有爲該項目拉動適當的鏈接。相反,它會獲得前一個項目的鏈接。SimpleXML沒有拉動正確的鏈接

有什麼建議嗎?謝謝!

<?php 
// Load the XML data from the specified file name. 
// The second argument (NULL) allows us to specify additional libxml parameters, 
// we don't need this so we'll leave it as NULL. The third argument however is 
// important as it informs simplexml to handle the first parameter as a file name 
// rather than a XML formatted string. 
$pFile = new SimpleXMLElement("http://example.blogspot.com/feeds/posts/default?alt=rss", null, true); 

// Now that we've loaded our XML file we can begin to parse it. 
// We know that a channel element should be available within the, 
// document so we begin by looping through each channel 
foreach ($pFile->channel as $pChild) 
{  

    // Now we want to loop through the items inside this channel 
    { 

    foreach ($pFile->channel->item as $pItem) 
    { 

     // If this item has child nodes as it should, 
     // loop through them and print out the data 


     foreach ($pItem->children() as $pChild) 
     { 
      // We can check the name of this node using the getName() method. 
      // We can then use this information, to, for example, embolden 
      // the title or format a link 
      switch ($pChild->getName()) 
      { 
       case 'pubDate': 
        $date = date('l, F d, Y', strtotime($pChild)); 
        echo "<p class=\"blog_time\">$date</p>"; 
        break; 

       case 'link': 
        $link = $pChild; 
        break; 

       case 'title': 

        echo "<p class=\"blog_title\"><a href=\"$link\">$pChild</a></p>"; 
        break; 

       case 'description': 
        // echo substr(strip_tags($pChild), 0 , 270) . "..."; 
        break; 



       case 'author': 
        echo ""; 
        break;  
       case 'category': 
        echo ""; 
        break; 
       case 'guid': 
        echo ""; 
        break; 

       default: 
        // echo strip_tags($pChild) . "<br />\n"; 
        break; 
      } 

     } 

    } 


    } 

} 

?> 

回答

2

也許我會說一些愚蠢的(也許我挺不理解你想要做什麼?),但將這樣的事情並不確定:

$pFile = new SimpleXMLElement("http://example.blogspot.com/feeds/posts/default?alt=rss", null, true); 
foreach ($pFile->channel->item as $item) { 
    echo "date : " . (string)$item->pubDate . '<br />'; 
    echo "title : " . (string)$item->title . '<br />'; 
    echo "URL : " . (string)$item->link . '<br />'; 
    echo '<hr />'; 
} 


基本上,你已經加載了XML數據,你可以迭代它的內容:它有一個簡單的對象/數組結構。

不要猶豫,看一看的var_dump($pFile);輸出,看看它是如何看起來像;-)


和代碼這一部分會顯示一些像這樣的輸出:

date : Sun, 06 Feb 2005 13:39:00 +0000 
title : ROSHAN & 2ND IN COMMAND, WOULD LIKE TO THANK THE FOLLOWING PEOPLE, FOR UNITING WITH US FOR THE PEOPLE OF SRI LANKA. MAY GOD BLESS YOU ALL! 
URL : http://example.blogspot.com/2005/02/roshan-2nd-in-command-would-like-to.html 
====== 
date : Sat, 05 Feb 2005 23:26:00 +0000 
title : ROSHAN & 2ND IN COMMAND, UNITED!, FOR THE PEOPLE OF SRI LANKA, JOIN US! 
URL : http://example.blogspot.com/2005/02/roshan-2nd-in-command-united-for.html 
====== 
date : Sat, 05 Feb 2005 23:01:00 +0000 
title : 2ND IN COMMAND!, A HOT EMERGING NEW ARTIST! 
URL : http://example.blogspot.com/2005/02/2nd-in-command-hot-emerging-new-artist.html 
====== 
date : Sat, 05 Feb 2005 22:43:00 +0000 
title : ICP (IN COMMAND PRODUCTIONS), Hip-Hop R&B Music & much much more!, UNITED!, FOR THE PEOPLE OF SRI LANKA 
URL : http://example.blogspot.com/2005/02/icp-in-command-productions-hip-hop-rb.html 
====== 

好吧,如果你想顯示HTML標籤,你將不得不適應這一點,但這應該至少可以幫助你入門...

+0

這很好用,ta! – kylex 2010-04-13 20:55:32

+0

不客氣:-)玩得開心! – 2010-04-13 21:28:56

0

在我身上發生的是你用第三個foreach的$ pChild覆蓋了第一個foreach的$ pChild。選擇一個不同的變量名稱。