Lukas
25.03.2005, 12:20
Moin,
folgendes Problem: ich habe mir mal ein Tutorial (http://www.drweb.de/programmierung/xml-php-expat.shtml) zu den xml-Funktionen von Php durchgelesen. Jetzt habe ich versucht, mir selbst einen Parser zu basteln.
<?php
function auf($parser, $name, $attr){
switch($name){
case 'ABC':
echo '<tr><td valign="top"><strong>' . $attr['NAME'] . '</strong></td><td>';
break;
case 'XYZ':
echo '<tr><td colspan="2">[';
break;
default:
die('Unbekanntes Element: ' . $name);
break;
}
}
function zu($parser, $name){
switch($name){
case 'ABC':
echo "</td></tr>\n";
break;
case 'XYZ':
echo "]</td></tr>\n";
break;
default:
die('Unbekanntes Element: ' . $name);
break;
}
}
function text($parser, $text){
echo $text;
}
echo "<html><body>\n<table border=\"1\">\n";
$data = file('test.xml');
$parser = xml_parser_create();
xml_set_element_handler($parser, 'auf', 'zu');
xml_set_character_data_handler($parser, 'text');
foreach($data as $i){
if(!xml_parse($parser, $i))
die(sprintf("XML error: %s at line %d\n",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}
xml_parser_free($parser);
echo "</table>\n</body></html>"
?>
Damit will ich folgende xml-Datei parsen:
<?xml version="1.0"?>
<xyz>bla</xyz>
<abc ttt="test">So, wenn man jetzt keine Fehlermeldungen sieht, müsste es gehen.</abc>
Der Parser gibt aber nur den Teil innerhalb von <xyz> aus. Danach bricht er mit folgender Meldung ab:
XML error: junk after document element at line 3
(die Fehlermeldung wird von dem die()-Befehl ausgegeben).
Leider konnte ich im Netz nichts darüber rausfinden, was genau "junk" in diesem Fall bedeutet und wie sich das beheben lässt.
Hat jemand eine Ahnung?
folgendes Problem: ich habe mir mal ein Tutorial (http://www.drweb.de/programmierung/xml-php-expat.shtml) zu den xml-Funktionen von Php durchgelesen. Jetzt habe ich versucht, mir selbst einen Parser zu basteln.
<?php
function auf($parser, $name, $attr){
switch($name){
case 'ABC':
echo '<tr><td valign="top"><strong>' . $attr['NAME'] . '</strong></td><td>';
break;
case 'XYZ':
echo '<tr><td colspan="2">[';
break;
default:
die('Unbekanntes Element: ' . $name);
break;
}
}
function zu($parser, $name){
switch($name){
case 'ABC':
echo "</td></tr>\n";
break;
case 'XYZ':
echo "]</td></tr>\n";
break;
default:
die('Unbekanntes Element: ' . $name);
break;
}
}
function text($parser, $text){
echo $text;
}
echo "<html><body>\n<table border=\"1\">\n";
$data = file('test.xml');
$parser = xml_parser_create();
xml_set_element_handler($parser, 'auf', 'zu');
xml_set_character_data_handler($parser, 'text');
foreach($data as $i){
if(!xml_parse($parser, $i))
die(sprintf("XML error: %s at line %d\n",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}
xml_parser_free($parser);
echo "</table>\n</body></html>"
?>
Damit will ich folgende xml-Datei parsen:
<?xml version="1.0"?>
<xyz>bla</xyz>
<abc ttt="test">So, wenn man jetzt keine Fehlermeldungen sieht, müsste es gehen.</abc>
Der Parser gibt aber nur den Teil innerhalb von <xyz> aus. Danach bricht er mit folgender Meldung ab:
XML error: junk after document element at line 3
(die Fehlermeldung wird von dem die()-Befehl ausgegeben).
Leider konnte ich im Netz nichts darüber rausfinden, was genau "junk" in diesem Fall bedeutet und wie sich das beheben lässt.
Hat jemand eine Ahnung?