Zwei Wege zur XML Verarbeitung in PHP4 und PHP5
Heute will ich einmal zwei Wege vorstellen, externe XML Dateien per PHP einzulesen und zu parsen.
Der erste Weg nutzt das SimpleXML Toolset, welches es ermöglicht im objektorientierten Kontext von PHP5, lokale und externe Dateien schnell und einfach zu verarbeiten. Die zweite Möglichkeit nutzt eine kleine Hilfsklasse namens XML-Line und greift auf die in PHP integrierten Expat Parsefunktionen zurück.
Als praktisches Beispiel für beide Methoden wollen wir uns einen RSS Feed (ist ja bekanntlich nichts anderes als eine XML Datei) von Amazon.de Vornehmen. Die Beststeller in der Kategorie Bücher zum Themawebenwicklung. Wenn ihr aus diesem Beispiel noch “praktischen Nutzen” ziehen wollt, könnt ihr euch auch gleich im Partnernet von Amazon anmelden und den Link zur XML Datei so modifizieren, dass Ihr Provisionen für jeden Kauf über eure geparsed’en XML Files bekommt. Nette Nebensache - aber vielleicht möchte ja jemand die kompletten Amazon Bestseller in seinem eigenen Design veröffentlichen ![]()
Weg 1: PHP5 - SimpleXML
Mit SimpleXML können XML Dateien unter PHP5 extrem komfortabel eingelesen und weiterverarbeitet werden. Zunächst laden wir die XML Datei mittels simplexml_load_file und könnnen danach mit objektorientierter Notation auf die einzelnen Elemente zugreifen. Hier ein Beispiel:
//Erst den Pfad zu der XML Datei angeben. Lokal oder remote spielt hierbei keine Rolle. //Danach wird nur die Funktion rawurlencode auf die URL angewendet um die URL auch W3C konform aufzubereiten. $xmlfile='http://www.amazon.de/rss/bestsellers/books/1201332/?tag=netzbastler-21'; $xml = simplexml_load_file(rawurlencode($xmlfile)); //Jetzt wurde bereits der Feed in die Variable $xml eingelesen, über print_r können wir uns nun bequem die Inhalte //anzeigen lassen und die benötigten Elemente auswählen. In diesem Beispiel wollen wir lediglich den Namen und den //Link zum Produkt abfragen print_r($xml); //Wir sehen, dass die einzelnen Bücher im XML Pfad /channel/item liegen, also wollen wir uns auf nur dieses Element beziehen //Anschliessend wird über die gefundenen Ergebnisse itegriert und die Attribute "title" und "link" ausgegeben $result = $xml->channel->item; foreach ($result as $buch) { echo '<a href="'.$buch->link.' title="'.$buch->title.'>'.$buch->title.'</a><br />'; } |
Weg2: PHP4 - XML-Line
Da der oben beschriebene Weg mit SimpeXML leider unter PHP4 nicht funktioniert, benötigen wir für selbstverständlich für PHP4 eine “einfache” Alternative. Ganz so einfach wie SimpleXML ist es nicht, aber es geht trotzdem halbwegs komfortabel. Zunächst benötigen wir die Hilfsklasse XML-Line, welche die nötigen Methoden zur XML Verarbeitung bereitstellt. Von der Logik her bleibt alles wie im ersten Weg. Wir wollen auf die gleiche XML Datei von Amazon zugreifen. Hier die Alternative:
<? //Die Hilfsklasse XMLline einbinden require_once("xml-line.php"); //Erst den Pfad zu der XML Datei angeben. Lokal oder remote spielt hierbei keine Rolle. //Danach wird nur die Funktion rawurlencode auf die URL angewendet um die URL auch W3C konform aufzubereiten. $xmlfile='http://www.amazon.de/rss/bestsellers/books/1201332/?tag=netzbastler-21'; $xml = new xml_line($xmlfile); //Wir sehen, dass alle Elemente von einem Item-Tag eingeschlossen sind. Also wollen wir auch nur alle diese Elemente verwenden //Anschliessend wird über die gefundenen Ergebnisse itegriert und die Attribute "title" und "link" ausgegeben $xml->get_record(0,"item"); $result = $xml->xml_stream(); $tmp = $xml->table_result; foreach ($tmp[0] as $buch) { echo '<a href="'.$buch['link'].' title="'.$buch['title'].'>'.$buch['title'].'</a><br />'; } ?> |
Beispiel
Selbstverständlich darf auch ein Beispiel nicht fehlen, wie das Ganze nachher aussieht. Hier ein Beispiel für die erste Version via SimpleXML unter PHP5.
Natürlich gibt es noch viele andere Möglichkeiten in PHP XML Dateien zu verarbeiten (z.B. DomXML), aber wir wollen ja erstmal klein anfangen
Falls Bedarf nach weiteren Tutorials zu diesem Thema besteht, wird sich dies ja hoffentlich in den Kommentaren zeigen.
Links zu diesem Beitrag:
- PHP Manual: SimpleXML
- PHP Manual: DomXML
- Peter Bieling: Homepage von XML-Line
- Timo Fietzer (Dr.Web): XML mit PHP und Expat parsen
- Timo Fietzer (Dr.Web): PHP und XML Einfach einfach!
- Direkter Download: XMLLine








