also mit dem untenstehenden code funktioniert der parser in php5... hoffe er macht dir spass wenn du ihn für php4 brauchst, musst du alle private und public wörter löschen und oben bei den 3 variablen ein var davorschreiben...
<?php
class XMLParser
{
private $file;
private $stack = array();
private $parser_file = null;
// start_element_handler ( resource parser, string name, array attribs )
private function startElement($parser, $name, $attribs)
{
$tag=array("name"=>$name,"attrs"=>$attribs);
array_push($this->stack,$tag);
}
// end_element_handler ( resource parser, string name )
private function endElement($parser, $name)
{
$this->stack[count($this->stack)-2]['children'][] = $this->stack[count($this->stack)-1];
array_pop($this->stack);
}
// handler ( resource parser, string data )
private function characterData($parser, $data)
{
if(trim($data))
{
if(isset($this->stack[count($this->stack)-1]['data']))
{
$this->stack[count($this->stack)-1]['data'] .= $data;
}
else
{
$this->stack[count($this->stack)-1]['data'] = $data;
}
}
}
// handler ( resource parser, string target, string data )
private function PIHandler($parser, $target, $data)
{
//PHP EVALUATION
if ((strtolower($target)) == "php") {
//eval($data); gust doesn't work if you want the
//string added to the array
$text .= '<?php '.$data.' ?>';
ob_start();
eval ('?>' . $text);
$text = ob_get_clean();
$this->stack[count($this->stack)-1]['data'] .= $text;
}
}
private function defaultHandler($parser, $data)
{
}
private function externalEntityRefHandler($parser, $openEntityNames, $base, $systemId,
$publicId) {
if ($systemId) {
if (!list($parser, $fp) = new_xml_parser($systemId)) {
printf("Could not open entity %s at %s\n", $openEntityNames,
$systemId);
return false;
}
while ($data = fread($fp, 4096)) {
if (!xml_parse($parser, $data, feof($fp))) {
printf("XML error: %s at line %d while parsing entity %s\n",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser), $openEntityNames);
xml_parser_free($parser);
return false;
}
}
xml_parser_free($parser);
return true;
}
return false;
}
private function new_xml_parser($file)
{
$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0);
xml_set_processing_instruction_handler($xml_parser, array (&$this, "PIHandler"));
xml_set_element_handler($xml_parser, array (&$this, "startElement"), array (&$this, "endElement"));
xml_set_character_data_handler($xml_parser, array ( &$this, "characterData"));
xml_set_default_handler($xml_parser, array ( &$this, "defaultHandler"));
xml_set_external_entity_ref_handler($xml_parser, array ( &$this, "externalEntityRefHandler"));
if (!($fp = @fopen($file, "r"))) {
return false;
}
if (!is_array($this->parser_file)) {
settype($this->parser_file, "array");
}
$this->parser_file[$xml_parser] = $file;
return array($xml_parser, $fp);
}
function NewParse($file)
{
if (!(list($xml_parser, $fp) = $this->new_xml_parser($file))) {
die("could not open XML input");
}
//ERROR
while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("XML error: %s at line %d\n",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
//END
xml_parser_free($xml_parser);
return $this->stack;
}
}
?>
<?
$p = new XMLParser();
$stack = $p->NewParse("http://www.informatik-forum.at/external.php?type=XML");
print("<pre>\n");
print_r($stack);
print("</pre>\n");
?>
Alles anzeigen