<?php
 #
 # A simple Atom parser, compatible with PEAR's XML::RSS
 # Requires PEAR's XML::Parser
 #
 # (C)2004 Cal Henderson, <cal@iamcal.com>
 #
require_once 'XML/Parser.php';
class XML_Atom extends XML_Parser
{
 var $insideTag = '';
 var $activeTag = '';
 var $channel = array();
 var $items = array();
 var $item = array();
 function XML_Atom($handle = '')
 {
 $this->XML_Parser();
 if (@is_resource($handle)) {
 $this->setInput($handle);
 } elseif ($handle != '') {
 $this->setInputFile($handle);
 } else {
 $this->raiseError('No filename passed.');
 }
 }
 function startHandler($parser, $element, $attribs)
 {
 switch ($element) {
 case 'FEED':
 case 'ENTRY':
 $this->insideTag = $element;
 break;
 case 'LINK':
 if ($this->insideTag == 'ENTRY'){
 $this->_add('item', 'link', $attribs[HREF]);
 }
 break;
 default:
 $this->activeTag = $element;
 }
 }
 function endHandler($parser, $element)
 {
 if ($element == $this->insideTag) {
 $this->insideTag = '';
 $this->struct[] = array_merge(array('type' => strtolower($element)), $this->last);
 }
 if ($element == 'ENTRY') {
 $this->items[] = $this->item;
 $this->item = '';
 }
 $this->activeTag = '';
 }
 function cdataHandler($parser, $cdata)
 {
 switch ($this->insideTag) {
 // Grab general channel information
 case 'FEED':
 switch ($this->activeTag) {
 case 'TITLE':
 $this->_add('channel', strtolower($this->activeTag), $cdata);
 break;
 }
 break;
 // Grab item information
 case 'ENTRY':
 switch ($this->activeTag) {
 case 'TITLE':
 $this->_add('item', strtolower($this->activeTag), $cdata);
 break;
 case 'CONTENT':
 $this->_add('item', 'description', $cdata);
 break;
 }
 break;
 } 
 }
 function defaultHandler($parser, $cdata)
 {
 return;
 }
 function _add($type, $field, $value)
 {
 if (empty($this->{$type}) || empty($this->{$type}[$field])) {
 $this->{$type}[$field] = $value;
 } else {
 $this->{$type}[$field] .= $value;
 }
 $this->last = $this->{$type};
 }
 function getStructure()
 {
 return (array)$this->struct;
 }
 function getChannelInfo()
 {
 return (array)$this->channel;
 }
 function getItems()
 {
 return (array)$this->items;
 }
}
?>

AltStyle によって変換されたページ (->オリジナル) /