Sehr schön !
Ich habe noch ein rudimentäres Beispiel. Der Parser ist ein einfacher xml-Parser, das Array muss sozusagen "händisch" ausgelesen werden.
Als Beispiel hab ich mal den Spiegelfeed ausgegeben
PHP-Code:
<?php
#Feed in string einlesen
$news = file_get_contents('http://www.spiegel.de/schlagzeilen/rss/0,5291,,00.xml');
$content='<h1>Spiegel Newsfeed</h1>';
#Feed parsen
$p =& new xmlParser();
$p->parse($news);
#Referenzobjekt mit den items
$items =& $p->output[0]['child'][0]['child'];
#wer sich das array anschauen möchte
#echo '<pre>'.print_r($items,true).'</pre>';
#die ersten 10 Ergebnisse ausgeben
for($i=5;$i<15;$i++) {
$content.='<div class="item_link">
<a href="'.$items[$i]['child'][1]['content'].'" target="_blank">'.
utf8_decode($items[$i]['child'][0]['content']).
'</a></div>';
}
#und ausgeben
echo $content;
#der parser
class xmlParser{
var $xml_obj = null;
var $output = array();
function xmlParser(){
$this->xml_obj = xml_parser_create();
xml_set_object($this->xml_obj,$this);
xml_set_character_data_handler($this->xml_obj, 'dataHandler');
xml_set_element_handler($this->xml_obj, "startHandler", "endHandler");
}
function parse($inp){
if (!xml_parse($this->xml_obj,$inp)) {
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($this->xml_obj)),
xml_get_current_line_number($this->xml_obj)));
xml_parser_free($this->xml_obj);
}
return true;
}
function startHandler($parser, $name, $attribs){
$_content = array('name' => $name);
if(!empty($attribs))
$_content['attrs'] = $attribs;
array_push($this->output, $_content);
}
function dataHandler($parser, $data){
if(!empty($data)) {
$_output_idx = count($this->output) - 1;
$this->output[$_output_idx]['content'] .= $data;
}
}
function endHandler($parser, $name){
if(count($this->output) > 1) {
$_data = array_pop($this->output);
$_output_idx = count($this->output) - 1;
$this->output[$_output_idx]['child'][] = $_data;
}
}
}
?>