Die neue PHP-Version 5 enthält neben zahlreichen anderen Neuerungen auch die Erweiterung SimpleXML. Mit ihr kann XML auf erstaunlich einfache Art in ein PHP Objekt überführt und verarbeitet werden.
artikel.xml:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<artikel>
<titel>Der Titel</titel>
<teaser>Der Teaser, eine kurze Beschreibung</teaser>
<inhalt>Der Artikelinhalt an sich</inhalt>
</artikel>
simplexml_1.php:
<?php
if (file_exists('artikel.xml')) {
$xml = simplexml_load_file('artikel.xml');
echo $xml->teaser[0];
} else {
exit('Konnte Datei nicht laden.');
}
?>
direkt in ein Objekt überführt
Dabei erfolgt der Zugriff auf die Elemente jeweils über Arrays. Da in unserem Fall nur ein Element innerhalb des Wurzelelementes <artikel> als <teaser> Element verwendet wird, geschieht der Zugriff auf den Inhalt dieses Elementes mit dem Arrayindex 0. Wären zwei <teaser> Elemente verwendet, würde man über den Index 1 auf das zweite Element zugreifen.
Um zu verstehen, wie bei SimpleXML die Daten in Objekten gespeichert werden, kann man sich mit der var_dump() Funktion von PHP schlicht den gesamten Inhalt des Objektes ausgeben lassen. Man ändert den Code einfach wie folgt ab:
simplexml_1.php:
<?php
if (file_exists("artikel.xml")) {
$xml = simplexml_load_file("artikel.xml"');
var_dump($xml);
}
else {
exit("Konnte Datei nicht laden. ");
}
?>
Die Ausgabe nach Aufruf des Skriptes sieht wie folgt aus:
object(SimpleXMLElement)#1 (3)
{
["titel"]=> string(9) "Der Titel"
["teaser"]=> string(35) "Der Teaser, eine kurze Beschreibung"
["inhalt"]=> string(25) "Der Artikelinhalt an sich"
}
Wenn man bedenkt, dass zum Parsen eines XML Dokumentes mit dem ereignisorientierten Parser Expat mindestens drei Funktionen definiert werden mussten, ist der hierzu notwendige Aufwand mit SimpleXML nicht vergleichbar.
Komplexere XML Dokumente und SimpleXML?
Auch komplexe XML Dokumente lassen sich mit SimpleXML rasch bearbeiten. Folgendes XML Dokument ist fast identisch mit dem Beispiel oben, es wurde jedoch mit Attributen und weiteren Elementen versehen.
artikel_2.xml:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<content>
<artikel id="1">
<meta>
<keywords>ein,netter,artikel</keywords>
<description>ein,lustiger,artikel</description>
</meta>
<titel>Der Titel</titel>
<teaser>Der Teaser, eine kurze Beschreibung</teaser>
<inhalt>Der Artikelinhalt</inhalt>
</artikel>
<artikel id="2">
<meta>
<keywords>ein,zweiter,netter,artikel</keywords>
<description>ein,zweiter,lustiger,artikel</description>
</meta>
<titel>Der zweite Titel</titel>
<teaser>Der zweite Teaser, eine kurze Beschreibung</teaser>
<inhalt>Der zweite Artikelinhalt</inhalt>
</artikel>
</content>
XPath Prozessor
Dies soll im folgenden Beispiel geschehen – es soll lediglich der vom Besucher angefragte Artikel angezeigt werden. Der gewünschte Artikel wird durch die ID identifiziert, die im <artikel> Element als Attribut definiert ist. Diese ID wird über den URL an das PHP Programm übergeben.
simplexml2.php
<?php
$id = $_GET['id'];
if (file_exists("test.xml")) {
$xml = simplexml_load_file("test.xml");
$path ="/content/artikel[@id=".$id."]";
if (!$res = $xml->xpath($path)) {
echo "Artikel nicht vorhanden!";
}
else {
echo "<h1>".$res[0]->titel."</h1>";
echo "<p><b>".$res[0]->teaser."</b></p>";
echo "<p>".$res[0]->inhalt."</p>";
}
}
else {
exit("Konnte Datei nicht laden.");
}
?>
Artikel-Objektes

Das Ergebnis beim Aufruf mit id=1
Natürlich kann man ein solches Problem auch ohne XPath lösen, SimpleXML stellt die dazu notwendigen Funktionen zur Verfügung – doch bietet SimpleXML gerade durch die Schnittstelle zu XPath viele weitere Möglichkeiten für die dynamische Programmierung. SimpleXML sollte also nicht unterschätzt werden.
Weitere Informationen zu SimpleXML und PHP5.
Weitere Beiträge:
- 5 Ideen wie Sie wiederkehrende Arbeitsschritte & Marketingprozesse gewinnbringend im Internet automatisieren! Ein Gastbeitrag von Robert Nabenhauer.
- Wachstum durch Facebook-Gewinnspiele: Wie Sie über Facebook virale Gewinnspiele & eine schnell wachsende Fangemeinde aufbauen
- Wie Sie aufmerksamkeitsstarke Prelaunch-, Launch- und Relaunch-Szenarien aufbauen und dabei Viralität, Spannung & Kaufkraft erzeugen
- Wie Sie waschechte Iphone-Apps mit PhoneGAP entwickeln, um am lukrativen App-Markt mitzumischen
- Wie Sie Ihr Shop-Sortiment so präsentieren, dass der Kunde in Zukunft mehr findet und eher kauft! Ein Gastbeitrag von Nicolas Schmidt-Voigt.
- 11 faszinierende BuddyPress-Plugins, um kostenlos aus WordPress ein soziales Netzwerk zu zaubern
- Die Vorboten einer neuen Internet-Industrie! Ein exklusiver Rückblick & Blick hinter die Kulissen der Clickbank-Exchange 2011 in New York.


Ein kleiner Fehler
$xml = simplexml_load_file(“artikel.xml”‘);
RICHTIG:
$xml = simplexml_load_file(“artikel.xml”);
Hi,
vielen Dank – hat mir im Verständnis sehr geholfen. Dennoch eine Frage: Hier wird ja auf eine real existierende XML-Datei zugegriffen. Gibt es auch eine Lösung, dass man eine mySQL-Datenbank ausliest, daraus eine “virtuelle” (also nicht auf der Festplatte befindliche) XML erstellt und mit dieser dann weiterarbeitet?
@Hannes: Wieso speicherst du die Daten nicht einfach in eine temporäre Datei, die du anschließend löschst?
“Wieso speicherst du die Daten nicht einfach in eine temporäre Datei, die du anschließend löschst?
”
Ja nicht!
Stell dir mal vor 100 Benutzer greifen gleichzeitig darauf zu?
Wie du php generierteHTML Seiten als normale HTML Seiten verwenden kannst (ohne das sie physisch existieren) kannst du auch php generierteXML Code wie normale XML Datei verwenden (ohne das sie physisch existieren).
@hannes: Du kannst einfach dir einen XML String zusammensetzen lassen aus den DB Daten und dann per simplexml_load_string drauf zugreifen.
Danke für die Erklärungen. Denke, dass nun einige Verständnis Probleme bei mir gelöst wurden und ich das neu erlernte bei meinem Portal gleich umsetzen werden.