Articles: 843 | Categories: 148   
   
   
Home Articles Contact Us
 
 
 
 
A Quick PHP XMLWriter Class Tutorial: XML & RSS (0 Comments)
Admin: Posted Date: April 4, 2010

Since there is absolutely no documentation on how to use PHP5's XMLWriter class, here is a very simple example of how to use the class to create an RSS feed. 

A Quick PHP XMLWriter Class Tutorial: XML & RSS


Since there is absolutely no documentation on how to use PHP5's XMLWriter class, here is a very simple example of how to use the class to create an RSS feed.
PHP Code:
<?php 
// THIS IS ABSOLUTELY ESSENTIAL - DO NOT FORGET TO SET THIS 
@date_default_timezone_set("GMT"); 
$writer = new XMLWriter(); 
// Output directly to the user 
$writer->openURI('php://output'); 
$writer->startDocument('1.0'); 
$writer->setIndent(4); 
// declare it as an rss document 
$writer->startElement('rss'); 
$writer->writeAttribute('version', '2.0'); 
$writer->writeAttribute('xmlns:atom', 'http://www.w3.org/2005/Atom'); 
$writer->startElement("channel"); 
//---------------------------------------------------- 
//$writer->writeElement('ttl', '0'); 
$writer->writeElement('title', 'Latest Products'); 
$writer->writeElement('description', 'This is the latest products from our website.'); 
$writer->writeElement('link', 'http://www.domain.com/link.htm'); 
$writer->writeElement('pubDate', date("D, d M Y H:i:s e")); 
$writer->startElement('image'); 
$writer->writeElement('title', 'Latest Products'); 
$writer->writeElement('link', 'http://www.domain.com/link.htm'); 
$writer->writeElement('url', 'http://www.iab.net/media/image/120x60.gif'); 
$writer->writeElement('width', '120'); 
$writer->writeElement('height', '60'); 
$writer->endElement(); 
//---------------------------------------------------- 
//---------------------------------------------------- 
$writer->startElement("item"); 
$writer->writeElement('title', 'New Product 8'); 
$writer->writeElement('link', 'http://www.domain.com/link.htm'); 
$writer->writeElement('description', 'Description 8 Yeah!'); 
$writer->writeElement('guid', 'http://www.domain.com/link.htm?tiem=1234'); 
$writer->writeElement('pubDate', date("D, d M Y H:i:s e")); 
$writer->startElement('category'); 
$writer->writeAttribute('domain', 'http://www.domain.com/link.htm'); 
$writer->text('May 2008'); 
$writer->endElement(); // Category 
// End Item 
$writer->endElement(); 
//---------------------------------------------------- 
// End channel 
$writer->endElement(); 
// End rss 
$writer->endElement(); 
$writer->endDocument(); 
$writer->flush(); 
?> 

The above will give you this:
Code:
<?xml version="1.0"?> 
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> 
<channel> 
<title>Latest Products</title> 
<description>This is the latest products from our website.</description> 
<link>http://www.domain.com/link.htm</link> 
<pubDate>Thu, 10 Jul 2008 11:47:14 GMT</pubDate> 
<image> 
<title>Latest Products</title> 
<link>http://www.domain.com/link.htm</link> 
<url>http://www.iab.net/media/image/120x60.gif</url> 
<width>120</width> 
<height>60</height> 
</image> 
<item> 
<title>New Product 8</title> 
<link>http://www.domain.com/link.htm</link> 
<description>Description 8 Yeah!</description> 
<guid>http://www.domain.com/link.htm?tiem=1234</guid> 
<pubDate>Thu, 10 Jul 2008 11:47:14 GMT</pubDate> 
<category domain="http://www.domain.com/link.htm">May 2008</category> 
</item> 
</channel> 
</rss>
Just a note from an RSS validator--this line should be before the 'channel' tag for some reason!
Code:
<atom:link href="http://dallas.example.com/rss.xml" rel="self" type="application/rss+xml" />
and here's how to use it as a pre made class...
PHP Code:
@date_default_timezone_set("GMT"); 
class rss extends XMLWriter 
{ 
// $file = filename to output to 
// $title = rss fed title 
// $description = rss feed description 
// $link = rss feed link 
// $date = date of feed 
function __construct($file, $title, $description, $link, $date) 
{ 
// Start by calling the XMLWriter constructor... 
$this->openURI($file); 
$this->startDocument('1.0'); 
$this->setIndent(4); 
$this->startElement('rss'); 
$this->writeAttribute('version', '2.0'); 
$this->writeAttribute('xmlns:atom', 'http://www.w3.org/2005/Atom'); 
$this->startElement("channel"); 
$this->writeElement('title', $title); 
$this->writeElement('description', $description); 
$this->writeElement('link', $link); 
$this->writeElement('pubDate', date("D, d M Y H:i:s e", strtotime($date))); 
} 
// Send a multi-dimensional array 
// $array = 
// 'title' = Item title 
// 'descritpion' 
// 'link' 
// 'guid' = unique id for item (should be a url) 
// 'category' = array of: 
// 'title' 
// 'domain' 
function addItem($array) 
{ 
if (is_array($array)) 
{ 
$this->startElement("item"); 
$this->writeElement('title', $array['title']); 
$this->writeElement('link', $array['link']); 
$this->writeElement('description', $array['description']); 
$this->writeElement('guid', $array['guid']); 
if (isset($array['date'])) 
{ 
$this->writeElement('pubDate', date("D, d M Y H:i:s e", strtotime($array['date']))); 
} 
if (isset($array['category']) && isset($array['category']['title'])) 
{ 
$this->startElement('category'); 
$this->writeAttribute('domain', $array['category']['domain']); 
$this->text($array['category']['title']); 
$this->endElement(); // Category 
} 
$this->endElement(); // Item 
} 
} 
function _endRss() 
{ 
// End channel 
$this->endElement(); 
// End rss 
$this->endElement(); 
$this->endDocument(); 
$this->flush(); 
} 
} // end class... 

...and a sample on the class usage:
PHP Code:
// Sample usage of class... 
$item = array(); 
$item['title'] = 'New product One'; 
$item['link'] = 'http://www.domain.com/product1.htm'; 
$item['description'] = 'A full description of product that is new.'; 
$item['guid'] = 'http://www.domain.com/product1.htm'; // a unique http address will do! 
$item['date'] = date('Y-m-d'); //send any time of date! 
$item['category'] = array(); 
$item['category']['title'] = 'CD Players'; 
$item['category']['domain'] = 'http://www.domain.com/cdplayers.htm'; 
$w = new rss('php://output', 'New Products', 'This month\'s new products', 'http://www.domain.com/link.htm', date('Y-m-d')); 
$w->addItem($item); 
$w->_endRss(); 
 

 
 
Add a Comment:
 
(You must be signed in to comment on an article. Not a member? Click here to register)
   
Title:

Comments: