tags:

views:

16

answers:

2

My code does not pull the proper link for the item. Instead it's getting the previous item's link.

Any suggestions? Thanks!

<?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;
            }

        }

   }


   }

}

?> 
A: 

What jumps out at me is that you're overwriting the first foreach's $pChild with the third foreach's $pChild. Choose a different variable name.

Danten
+2  A: 

Maybe I'll say something stupid (maybe I quite don't understand what you're trying to do ?), but would something like this not be OK :

$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 />';
}


Basically, one you have loaded the XML data, you can iterate over its content : it has a simple object/array structure.

Don't hesitate to take a look at the output of var_dump($pFile);, to see how it looks like ;-)


And this portion of code would display some output like this :

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
======

Well, you'll have to adapt this a bit, if you want to display HTML tags, but this should at least help you getting started...

Pascal MARTIN
That works well enough, ta!
kylex
You're welcome :-) Have fun !
Pascal MARTIN