Zwei Wege zur XML Verarbeitung in PHP4 und PHP5

Heute will ich einmal zwei Wege vorstellen, externe Dateien per einzulesen und zu .
Der erste Weg nutzt das SimpleXML Toolset, welches es ermöglicht im objektorientierten Kontext von , lokale und externe Dateien schnell und einfach zu . Die zweite Möglichkeit nutzt eine kleine Hilfsklasse namens XML-Line und greift auf die in integrierten Parsefunktionen zurück.

Als praktisches Beispiel für beide Methoden wollen wir uns einen RSS Feed (ist ja bekanntlich nichts anderes als eine 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 Datei so modifizieren, dass Ihr Provisionen für jeden Kauf über eure geparsed’en Files bekommt. Nette Nebensache - aber vielleicht möchte ja jemand die kompletten Amazon Bestseller in seinem eigenen veröffentlichen :-)

Weg 1: -

Mit können Dateien unter extrem komfortabel eingelesen und weiterverarbeitet werden. Zunächst laden wir die 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: -

Da der oben beschriebene Weg mit SimpeXML leider unter nicht funktioniert, benötigen wir für selbstverständlich für eine “einfache” Alternative. Ganz so einfach wie ist es nicht, aber es geht trotzdem halbwegs komfortabel. Zunächst benötigen wir die Hilfsklasse XML-Line, welche die nötigen Methoden zur Verarbeitung bereitstellt. Von der Logik her bleibt alles wie im ersten Weg. Wir wollen auf die gleiche 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 unter .

Natürlich gibt es noch viele andere Möglichkeiten in Dateien zu (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:

Social Bookmarks
  • Digg
  • del.icio.us
  • Facebook
  • Google
  • MisterWong.DE

Verwandte Artikel

URI um diese Seite zu verlinken / Trackback Kommentare als RSS

Einen Kommentar schreiben