<?php
/**
* OPML Parser
*
* A simple OPML parser for PHP 5, using the SimpleXMLElement class.
*
* Copyright (c) 2008, Ryan McCue
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* * Neither the name of Lilina nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
* AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* @author Ryan McCue
* @package OPML Parser
* @link http://cubegames.net/code/opml-parser/ OPML Parser Homepage
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
*/
/**
* OPML Parser class
*
* @package OPML Parser
*/
class OPMLParser {
public $data = array();
public $raw = '';
public $error = '';
public function __construct($raw_data) {
$this->raw = $raw_data;
// Create an XML parser
try {
$xml_parser = new SimpleXMLElement($this->raw, LIBXML_NOERROR);
$this->data = $this->loop($xml_parser->body->outline);
}
catch (Exception $e) {
$this->error = $e->getMessage();
return;
}
}
protected function loop($element) {
$data = array();
foreach($element as $element) {
if($element['type'] == 'rss' || isset($element['xmlUrl'])) {
$data[] = $this->format($element);
} elseif($element->outline) {
$data[(string) $element['text']] = $this->loop($element->outline);
}
}
return $data;
}
/**
* Return an array from a supplied SimpleXMLElement object
*
* @param SimpleXMLElement $element
* @return array
*/
protected function format($element) {
return array(
'htmlurl' => (string) $element['htmlUrl'],
'xmlurl' => (string) $element['xmlUrl'],
'text' => (string) $element['text'],
'title' => (string) $element['title'],
'description' => (string) $element['description'],
);
}
}