auslesen einer XML Datei via PHP

virtualsix

Grünschnabel
An alle PhP-Freaks,

ich programmiere noch nicht lange PHP und habe mir gleichmal zur AUfgabe gemacht, via PHP eine XML Datei welche auf einem entfernten Server liegt auszulesen.

Wie kann ich das genau machen ?
 
Du bestimmst einen parser durch den aufruf vom

$xm._parser = xml_parser_create();

Danach musst du die Handler bestimmen
also z.b den ElementHandler

bool xml_set_element_handler ( resource parser, string start_element_handler, string end_element_handler)

Das heisst
xml_set_element_handler($xml_parser,"startNode","endNode");

Damit wird beim auftreten einer XML Node beim öffneenden Tag die Funktion startNode() aufgerufen und zwar mit folgenden Paramtern(resource Parser, String name, String[] Attributes)

das heisst du kannst in dieser funktion mit foreach die Attribute durchlaufen usw.

end node ist ähnlich nur ohne Attribute.

Dann musst du einen character_data_handler bestimmen der deine Daten entgegennimmt

xml_set_character_data_handler($xml_parser,"getData");

Die Funktion getData();
nimmt die Parameter ressource Parser und text auf

wenn die beiden wichtigsten Handler (SAX definiiert eigentlich noch ein paar mehr)
alle definiert ist kannst du
xml_parse($xml_parser,$xmldata);
aufrufen


naja ist etwas umfangreicher die XML Parsung. Nicht als Anfänger Lern thema geeignet aber ziemlich interressant
 
moin!

ich hab jetzt auch nochma ne frage: das o.g. script funzt ja ganz jut, nur wie is das jetzt, wenn ich keine "statische" xml datei hab, sondern eine xml datei, die entsprechend einer query daten aus der db holt und mir die daten xml-formatiert ausgibt?
 
Nun in irgendeiner Weise werden die Daten letztendlich ja an das Script gesendet.
Also entweder als Datei die gelesen werden kann oder als Stream der ebenso gelesen werden kann.

Die funktion
bool xml_parse ( resource parser, string data [, bool is_final])

parst einen String.
Diesen String kannst du über eine URL z.b erhalten

PHP:
<?php
$XMLData = "";
$fp = fsockopen ("www.testDomain.com/xmldata.xml", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br>\n";
} else {
    fputs ($fp, "GET / HTTP/1.0\r\nHost:  w ww.testDomain.com\r\n\r\n");
    while (!feof($fp)) {
        $XMLData .= fgets ($fp,128);
    }
    fclose ($fp);
}
?>


Und dem String XMLData zuweisen. Diesen kannst du dann auf die unten besprochene Weise auselesen.

PS: Der Code oben ist ungetestet :p
 
Lieber Christian,

deinen ersten Beitrag noch etwas ausarbeiten, und diese Community hat einen neuen Tutorial.

Finde ich gut und bedanke mich! Hab schon die ganze Zeit danach gesucht, die Erklärung auf php.net war mir nicht sehr verständlich

Mit freundlichen Grüßen
ChuloGT
 
Wollte mich eh mal hinsetzen und ein Tutorial darüber schreiben. Wollte nur mehrere Bsp. aufzeigen. Einmal mit SimpleXML und mit der DOM ;)

*setzt sich gleich mal hin* Vielleicht heute Abend ;)
 
Zurück