This tutorial will provide a simple example of one method for parsing an XML document, more specifically, an RSS formatted XML document. This tutorial will use the new Simple XML object added to PHP 5.
If you wish to follow this tutorial properly then you should first download the RSS XML document attached to this thread called talkphp.xml. Now you’ve done that, create a new file on your website and add the following code:
// 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('talkphp.xml', 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)
// Print our channel specific information, this should be
// easy to understand, basically we're grabbing the
// title, descripting and link nodes and outputting their values
echo "<h1>" . $pChild->title . "</h1>\n";
echo $pChild->description . "<br />\n";
printf('Visit us at <a href="%s">%s</a><br />' . "\n", $pChild->link, $pChild->link);
// 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
echo "<b>$pChild</b><br />\n";
printf('<a href="%s>%s</a><br />' . "\n", $pChild, $pChild);
In order to run this code you must name the XML document ‘talkphp.xml’ and place it in the same directory as PHP file. Please note, for the sake of simplicity I've removed all error checking and validation.
That’s all there is to using SimpleXML, easy, huh?
Last edited by Wildhoney : 09-17-2007 at 11:46 AM.
I just love how simple (pardon the pun) SimpleXML is to use. When comparing it to the nasty old days of parsing manually through an XML document, using SimpleXML is almost child's play.
/* Challenge: Output the title and author of the latest post within the Tips & Tricks forum on TalkPHP, in two lines of code. (Code can be wrapped for readability) */
$rss = new SimpleXMLElement( 'http://www.talkphp.com/external.php?lastpost=1&forumids=10', LIBXML_NOCDATA, true);
printf('<p><strong>%s</strong> by %s</p>', $rss->channel->item->title, $rss->channel->item->children('http://purl.org/dc/elements/1.1/')->creator);
The complicated children() line above is just to access a namespaced node (dc:creator) -- it's nothing scary. The LIBXML_NOCDATA flag will likely be the subject of an article/post here sooner or later.
Dont you need to install an rss reader to be able to use it as an rss feed? I have never really understood that bit, still learning XML but struggling with how exactly you set your php file to decipher the xml file.
and about 100 other really irritating questions.
I am trying to work out how to create navigation menu with xml at the moment but in asp, it's fine if you use one of the bullcrap built in controls but what about making your own! lazy microsoft.. lazy
If you take a look at the attachments for the main post you'll see one file called 'talkphp.xml'. This is the file that the code uses. So if you look inside that and then take another look at the code, possibly even run it on your local machine if you can, then I'm sure things will become a little clearer :)
As for your second question, no, you do not need an RSS reader to read a RSS feed, the above code does just that, reads as RSS formatted XML file.