Hallo zusammen
Kann mir jemand sagen, wieso mein Parser nicht das macht, was er will? Eigentlich sollte er alles wunderschön auslesen und auch ordentlich darstellen... aber eben, sollte...
Hier der Code:
Die Datei ist hier zu finden: http://deny.pytalhost.com//parser.php
Den Parser habe ich von hier:
http://www.heise.de/ix/artikel/2001/04/201/01.shtml
Mit der Datei von ihnen klappt es bei mir auch. Doch wenn ich den Link der Seite eingebe, welche ich parsen will, dann funzt die Darstellung nicht mehr. Wo liegt der Fehler?
Vielen Dank.
PS: Wenn ich die XML-Seite in eine Datei speichere, und den Parser dann laufen lasse, funktioniert alles einwandfrei. Warum das? Kann ich es auch online zum Laufen bringen?
Kann mir jemand sagen, wieso mein Parser nicht das macht, was er will? Eigentlich sollte er alles wunderschön auslesen und auch ordentlich darstellen... aber eben, sollte...
Hier der Code:
PHP-Code:
<?php
// Umwandlungstabelle definieren
$tag_tabelle = array(
"STOCKQUOTES" => "P",
"STOCK" => "P",
"SYMBOL" => "B",
"LAST" => "I",
"DATE" => "P",
"TIME" => "P",
"CHANGE" => "P",
"OPEN" => "P",
"HIGH" => "P",
"LOW" => "P",
"VOLUME" => "P",
"MKTCAP" => "P",
"PREVIOUSCLOSE" => "P",
"PERCENTAGECHANGE" => "P",
"ANNRANGE" => "P",
"EARNS" => "P",
"P-E" => "P",
"NAME" => "P"
);
// start_element() - wird vom XML-Parser bei öffnenden
// Tags aufgerufen
function start_element( $parser, $name, $attribute )
{
// Umwandlungstabelle in den lokalen Scope holen
global $tag_tabelle;
// Testen, ob den aktuelle Tag in der Tabelle definiert ist
if( isset( $tag_tabelle[ $name ] ) )
{
// öffnenden Tag ausgeben
print "<" . $tag_tabelle[ $name ] . ">";
}
}
// end_element() - wird vom XML-Parser bei schließenden
// Tags aufgerufen
function end_element( $parser, $name )
{
// Umwandlungstabelle in den lokalen Scope holen
global $tag_tabelle;
// Testen, ob der aktuelle Tag in der Tabelle definiert ist
if( isset( $tag_tabelle[ $name ] ) )
{
// Schließenden Tag ausgeben
print "</" . $tag_tabelle[ $name ] . ">";
}
}
// daten() - wird vom XML-Parser für CDATA-Bereiche aufgerufen
function daten( $parser, $data )
{
// Datenbereich ausgeben
print $data;
}
// Instanz des XML-Parsers erzeugen
$parser = xml_parser_create();
// Parameter des XML-Parsers setzen
xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, true );
// Handler für Elemente ( öffnende / schließende Tags ) setzen
xml_set_element_handler( $parser, "start_element", "end_element" );
// Handler für Daten ( CDATA ) setzen
xml_set_character_data_handler( $parser, "daten" );
// Versuchen, die Datei zu öffnen
if (! ( $fp = fopen( "http://www.webservicex.net/stockquote.asmx/GetQuote?symbol=NESN.VX", "r" ) ) )
{
// Fehler -> Ausführung abbrechen
die( "XML Fehler: Konnte Datei nicht öffnen." );
}
// Datei zeilenweise auslesen
while( $data = fread( $fp, 4096 ) )
{
// Versuchen, die aktuelle Zeile zu parsen
if( !xml_parse( $parser, $data, feof( $fp ) ) )
{
// Fehler -> Ausführung abbrechen
die( "XML Fehler: " .
xml_error_string( xml_get_error_code( $parser ) ) .
" in Zeile " .
xml_get_current_line_number( $parser )
);
}
}
// Vom XML-Parser belegten Speicher freigeben
xml_parser_free( $parser );
?>
Den Parser habe ich von hier:
http://www.heise.de/ix/artikel/2001/04/201/01.shtml
Mit der Datei von ihnen klappt es bei mir auch. Doch wenn ich den Link der Seite eingebe, welche ich parsen will, dann funzt die Darstellung nicht mehr. Wo liegt der Fehler?
Vielen Dank.
PS: Wenn ich die XML-Seite in eine Datei speichere, und den Parser dann laufen lasse, funktioniert alles einwandfrei. Warum das? Kann ich es auch online zum Laufen bringen?
Kommentar