Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit den xml-Funktionen von Php



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?

dead_orc
25.03.2005, 12:51
AFAIK muss eine XML-Datei von einem Tag komplett umgeben sein. Versuchs mal mit dieser Datei:

<?xml version="1.0"?>
<xml>
<xyz>bla</xyz>
<abc ttt="test">So, wenn man jetzt keine Fehlermeldungen sieht, müsste es gehen.</abc>
</xml>
Ich kann mich irren, aber so funktioniert es bei mir.

[EDIT]
Glück gehabt. Aber immerhin gibt Jeez mir damit Recht ^^

Jesus_666
25.03.2005, 12:51
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?
Das ist ganz korrekt. Der XML-Standard schreibt folgenden Aufbau eines XML-Dokuments vor:

<?xml version="x.y"?>
<basistag>
<kram dazwischen />
</basistag>ALLES außer der XML-Definition und dem Basistag muß innerhalb des Basistags stehen. Es darf nur einen Basistag geben.

Du hast nach dem Basistag Text, womit es kein wohlgeformtes XML-Dokument ist.

Lukas
25.03.2005, 19:33
Wieso vergesse ich immer das Detail, das gerade wichtig ist? Daran lag's, thx.