PHP

PHP und XML: Einfach einfach!

2. Juli 2004
von

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.

Release Candidate 3 von PHP5

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

xml 1 foto
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.

 foto

Thiemo Fetzer

Thiemo Fetzer lebt seit 2008 in London und promoviert dort im Fachbereich "Entwicklungsökonomie" an der London School of Economics. Zuvor hat er Wirtschaftswissenschaften, Mathematik und Informatik in Magdeburg und Ulm studiert.

10 Kommentare zu „PHP und XML: Einfach einfach!

  1. wii am 12. Februar 2009 um 13:58

    Ein kleiner Fehler

    $xml = simplexml_load_file(“artikel.xml”‘);

    RICHTIG:

    $xml = simplexml_load_file(“artikel.xml”);

  2. Hannes am 24. Februar 2009 um 08:55

    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?

  3. Reportagen am 5. März 2009 um 11:37

    @Hannes: Wieso speicherst du die Daten nicht einfach in eine temporäre Datei, die du anschließend löschst? ;)

  4. Chris am 18. März 2009 um 09:34

    “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).

  5. Pascal am 20. März 2009 um 09:14

    @hannes: Du kannst einfach dir einen XML String zusammensetzen lassen aus den DB Daten und dann per simplexml_load_string drauf zugreifen.

  6. [...] eigentlichem Problem DenisCGN: Hast Du schon mal in Richtung xml-Verarbeitung in php was gemacht (Beispiel)? Ich frage nur deshalb nach, weil das Problem die xml-Daten zu verarbeiten, nur ein kleiner Teil [...]

  7. [...] nicht? Ich sehe da so einige Seiten mit Beispielen … PHP und XML: Einfach einfach! PHP: SimpleXML – [...]

  8. Nordseewolf am 11. Juli 2009 um 22:57

    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.

  9. [...] xml reader Mit den Suchw

  10. [...] Hab mal gegoogelt und dabei das hier gefunden: PHP und XML: Einfach einfach! | PHP, XML | Dr. Web Magazin [...]

Ein Kommentar? Schön!

Wir freuen uns immer über Leser, die durch nützliche und konstruktive Beiträge zum Thema eine Diskussion anstoßen oder den Artikel mit weiteren Informationen anreichern. Alle Kommentare werden in diesem Sinne moderiert. Zum Kommentar-Fairplay gehört für uns auch der Einsatz von rel="nofollow". Bitte verwenden Sie zudem als Namen weder eine Domain noch ein spamverdächtiges Wort. Vielen Dank!

*