speicher
Erfahrenes Mitglied
Hallo !
Ich versuche bei meinem Newsticker für einen RDF-Newsfeed , der in ein Array geschrieben wird, die Anzahl der geparsten Elemente mit auszugeben. Dafür möchte ich die Variable $_index als Maximalanzahl von Elementen mit verwenden, aber irgendwie funktioniert die Übergabe nicht. Danke für jeden Hinweis.
ausgabe.php
parser.php
Ich versuche bei meinem Newsticker für einen RDF-Newsfeed , der in ein Array geschrieben wird, die Anzahl der geparsten Elemente mit auszugeben. Dafür möchte ich die Variable $_index als Maximalanzahl von Elementen mit verwenden, aber irgendwie funktioniert die Übergabe nicht. Danke für jeden Hinweis.
ausgabe.php
PHP:
<?php
include("parser.php");
$max=$_index;
for ($x = 1; $x < ($max+1); $x++) {
echo '<br><hr><br>';
echo '<a href="' . print_r($items[$x][link], true) . '"target="News" class="z"><span>['.$x.'/'.$max.'] '.$items[$x][title].'</span><br><font face="Lucida Sans Unicode" size="1">[externer Link]</font></a>';
}
?>
parser.php
PHP:
<?php
class rdfparser {
var $_items; // array the items
var $_may; // array what may be done
var $_act; // string current active
var $_index; // integer current index
var $_url; // url to open
function rdfparser($url)
{
$this->_url = $url;
}
function parse()
{
$this->_items = array();
$this->_index = 0;
$this->_may['parse'] = false;
$parser = xml_parser_create();
xml_set_object($parser, $this);
xml_set_element_handler($parser, "_startElement", "_endElement");
xml_set_character_data_handler($parser, "_charHandler");
$fp = fopen($this->_url, "r");
while(!feof($fp)) {
$line = fgets($fp, 4096);
xml_parse($parser, $line);
}
fclose($fp);
xml_parser_free($parser);
return $this->_items;
}
function _startElement($parser, $name, $attrs)
{
// allow parsing chardata as soon as an element is opened
$this->_may['char'] = true;
if ($name=="ITEM") {
// allow parsing as soon as an item element was opened
$this->_may['parse'] = true;
// one more item -> increment index
$this->_index++;
$this->_items[$this->_index] = Array('title' => '', 'link' => '', 'description' => '');
} else if ($name=="TITLE") {
// current active: title
$this->_act = "TITLE";
} else if($name=="LINK") {
// current active: link
$this->_act = "LINK";
} else if($name=="DESCRIPTION") {
// current active: description
$this->_act = "DESCRIPTION";
} else {
// unknown tag, don't allow adding chardata
$this->_may['char'] = false;
}
$this->_act = strtolower($this->_act);
}
function _endElement($parser, $name)
{
if($name=="ITEM") {
// item tag closed: parsing not allowed
$this->_may['parse'] = false;
} elseif($name=="TITLE" || $name=="LINK" || $name="DESCRIPTION") {
// datatag closed, we don't want different chardata
$this->_may['char'] = false;
}
}
function _charHandler($parser, $data)
{
$data = trim($data);
if(!$this->_may['char'] OR !$this->_may['parse']) {
return;
}
if (isset($this->_items[$this->_index][$this->_act])) {
$this->_items[$this->_index][$this->_act] .= $data;
} else {
$this->_items[$this->_index][$this->_act] = $data;
}
}
}
$rdfparser = new rdfparser('http://www.tagesschau.de/newsticker.rdf');
$items = $rdfparser->parse(); ?>