SimpleXML not pulling correct link
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;
}
}
}
}
}
?>
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...
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.
精彩评论