In diesem PHP-Tutorial erläutere ich Ihnen, wie Sie eine XML-Datei mithilfe von PHP einlesen können. Wir werden Schritt für Schritt vorgehen und dabei die notwendigen Details und Erklärungen liefern, um das Verständnis zu vertiefen.
Der typische Ablauf beim Einlesen einer XML-Datei mit PHP sieht so aus:
graph TD
A["XML vorhanden?"] -->|Ja| B["Einlesen"]
A -->|Nein| C["Fehlermeldung"]
B --> D{"XML gültig?"}
D -->|Ja| E["Daten auslesen"]
D -->|Nein| F["Fehler behandeln"]
E --> G["Ausgeben"]
Voraussetzungen
Bevor Sie beginnen, sollten Sie über folgende Komponenten verfügen:
- PHP-Umgebung: Stellen Sie sicher, dass PHP korrekt auf Ihrem Server oder lokalen Rechner installiert ist.
- Texteditor: Ein einfacher Texteditor wie Notepad++, Sublime Text oder VS Code eignet sich hervorragend zum Bearbeiten von PHP- und XML-Dateien.
Schritt 1: Erstellung der XML-Datei
Zunächst benötigen Sie die XML-Datei, die Sie einlesen möchten. In diesem Beispiel erstellen wir eine XML-Datei namens xml_datei.xml. Diese Datei wird im gleichen Verzeichnis wie Ihr PHP-Skript gespeichert.
Inhalt der XML-Datei
Öffnen Sie Ihren bevorzugten Texteditor und fügen Sie den folgenden Inhalt ein:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<verzeichnis>
<titel>Städteverzeichnis</titel>
<eintrag>
<stichwort>Erfurt</stichwort>
<eintragstext>Erfurt ist die Hauptstadt von Thüringen...</eintragstext>
</eintrag>
<eintrag>
<stichwort>Jena</stichwort>
<eintragstext>Jena ist bekannt für ihre Universitäten und Forschungseinrichtungen...</eintragstext>
</eintrag>
</verzeichnis>
Speichern der XML-Datei
Speichern Sie die Datei unter dem Namen xml_datei.xml im gleichen Verzeichnis wie Ihr PHP-Skript. Achten Sie darauf, dass der Dateiname exakt übereinstimmt, um Fehler beim Einlesen zu vermeiden.
Schritt 2: Erstellung des PHP-Skripts
Nun erstellen wir das PHP-Skript, das die XML-Datei einliest und die Daten verarbeitet. Das Skript kann beliebig benannt werden, beispielsweise einlesen_xml.php, solange es sich im selben Verzeichnis wie xml_datei.xml befindet.
PHP-Code Erklärung
Im Folgenden finden Sie den vollständigen PHP-Code mit ausführlichen Kommentaren:
<?php
header('Content-Type: text/html; charset=utf-8');
/**
* Definieren des Pfads zur XML-Datei inklusive Dateinamen
*/
$xml_datei = 'xml_datei.xml';
/**
* Überprüfen, ob die XML-Datei existiert
* Die @-Zeichen unterdrücken Fehlermeldungen, falls die Datei nicht gefunden wird
*/
if (file_exists($xml_datei) != false) {
/**
* Einlesen der XML-Datei mit der Funktion simplexml_load_file()
* Die geladene XML wird als Objekt in $xml_object gespeichert
*/
$xml_object = simplexml_load_file($xml_datei);
/**
* Überprüfen, ob das Element <eintrag> im XML-Objekt vorhanden ist
*/
if (is_object($xml_object->eintrag) == true) {
/**
* Durchlaufen der <eintrag>-Elemente mit einer foreach-Schleife
* Jede Iteration liefert den Schlüssel ($key) und den Wert ($value) des aktuellen Elements
*/
foreach ($xml_object->eintrag as $key => $value) {
/**
* Ausgabe des <stichwort>-Elements in Fettdruck
*/
echo '<b>' . $value->stichwort . '</b><br />';
/**
* Ausgabe des <eintragstext>-Elements
*/
echo $value->eintragstext . '<br />';
}
}
} else {
/**
* Beenden des Skripts mit einer Fehlermeldung, falls die XML-Datei nicht geöffnet werden kann
*/
exit('Konnte ' . $xml_datei . ' nicht öffnen.');
}
?>
Detaillierte Erläuterungen
-
Header setzen:
header('Content-Type: text/html; charset=utf-8');
Dieser Header stellt sicher, dass der Inhalt als HTML mit UTF-8-Kodierung interpretiert wird, was wichtig für die korrekte Darstellung von Sonderzeichen ist.
-
Pfad zur XML-Datei definieren:
$xml_datei = 'xml_datei.xml';
Hier wird die Variable $xml_datei mit dem Namen der XML-Datei initialisiert. Da sich die Datei im gleichen Verzeichnis wie das PHP-Skript befindet, reicht der Dateiname aus.
-
Existenz der XML-Datei prüfen:
if (file_exists($xml_datei) != false) {
Die Funktion file_exists() überprüft, ob die angegebene Datei vorhanden ist. Das @-Zeichen unterdrückt etwaige Fehlermeldungen, die auftreten könnten, wenn die Datei nicht existiert.
-
XML-Datei einlesen:
$xml_object = simplexml_load_file($xml_datei);
Die Funktion simplexml_load_file() lädt die XML-Datei und konvertiert sie in ein einfach zu bearbeitendes Objekt. Dies ermöglicht den direkten Zugriff auf die XML-Struktur und deren Elemente.
-
Überprüfen, ob das <eintrag>-Element vorhanden ist:
if (is_object($xml_object->eintrag) == true) {
Diese Bedingung stellt sicher, dass das XML-Objekt das Element <eintrag> enthält und dass es sich um ein gültiges Objekt handelt.
-
Durchlaufen der <eintrag>-Elemente mit foreach:
foreach ($xml_object->eintrag as $key => $value) {
Die foreach-Schleife iteriert über jedes <eintrag>-Element im XML. Dabei werden der Schlüssel ($key) und der Wert ($value) des aktuellen Elements ermittelt.
-
Ausgabe der Daten:
echo '<b>' . $value->stichwort . '</b><br />';
echo $value->eintragstext . '<br />';
Hier werden die Inhalte der <stichwort>- und <eintragstext>-Elemente formatiert und auf der Webseite angezeigt. <b> sorgt für Fettdruck, und <br /> fügt einen Zeilenumbruch hinzu.
-
Fehlerbehandlung bei fehlender XML-Datei:
else {
exit('Konnte ' . $xml_datei . ' nicht öffnen.');
}
Falls die XML-Datei nicht gefunden oder nicht geöffnet werden kann, beendet die exit()-Funktion das Skript und gibt eine Fehlermeldung aus.
Schritt 3: Ausführung des PHP-Skripts
Nachdem Sie sowohl die XML-Datei als auch das PHP-Skript erstellt haben, können Sie das Skript ausführen, um die Daten der XML-Datei anzuzeigen.
Erwartete Ausgabe
Die Ausgabe des Skripts sollte wie folgt aussehen:
Erfurt
Erfurt ist die Hauptstadt von Thüringen...
Jena
Jena ist bekannt für ihre Universitäten und Forschungseinrichtungen...
Diese Ausgabe zeigt die Inhalte der <stichwort>- und <eintragstext>-Elemente aus der XML-Datei in einer übersichtlichen und lesbaren Form an.
Fehlerbehandlung bei XML-Dateien
In der Praxis kann eine XML-Datei fehlerhaft sein, zum Beispiel durch falsche Kodierung oder fehlende schließende Tags. Mit libxml_use_internal_errors(true) kannst du diese Fehler abfangen, ohne dass PHP eine Warnung auf dem Bildschirm ausgibt:
<?php
libxml_use_internal_errors(true);
$xml = simplexml_load_file('daten.xml');
if ($xml === false) {
echo 'XML konnte nicht geladen werden:';
foreach (libxml_get_errors() as $fehler) {
echo '<br>Zeile ' . $fehler->line
. ': ' . $fehler->message;
}
libxml_clear_errors();
exit;
}
/* XML ist gültig, weiterarbeiten */
echo 'XML erfolgreich geladen.';
?>
Dieser Ansatz gibt dir die volle Kontrolle über die Fehlerausgabe. Die Funktion libxml_get_errors() liefert ein Array mit detaillierten Informationen zu jedem einzelnen Fehler, inklusive Zeilennummer und Fehlerbeschreibung.
Gezielte Abfragen mit XPath
Statt alle Einträge per foreach zu durchlaufen, kannst du mit XPath gezielt einzelne Knoten abfragen. SimpleXML unterstützt XPath direkt über die Methode xpath():
<?php
$xml = simplexml_load_file('daten.xml');
/* Alle Einträge finden */
$alle = $xml->xpath('//eintrag');
/* Nur Einträge mit bestimmtem Stichwort */
$ergebnis = $xml->xpath(
'//eintrag[stichwort="Erfurt"]'
);
foreach ($ergebnis as $eintrag) {
echo $eintrag->beschreibung . '<br>';
}
?>
XPath verwendet eine pfadbasierte Syntax: // sucht im gesamten Dokument, eckige Klammern [] filtern nach Bedingungen und @ greift auf Attribute zu. Für komplexe XML-Strukturen ist XPath deutlich effizienter als verschachtelte Schleifen.
XML mit Attributen lesen
Reale XML-Dateien nutzen neben Elementen fast immer auch Attribute. So greifst du auf Attribute eines XML-Elements zu:
<?php
/* XML mit Attributen: */
/* <eintrag id="1" status="aktiv"> */
$xml = simplexml_load_file('daten.xml');
foreach ($xml->eintrag as $e) {
/* Attribut-Zugriff per Array-Syntax */
$id = (string) $e['id'];
$status = (string) $e['status'];
echo 'ID: ' . $id . ', Status: ' . $status;
}
?>
SimpleXML macht den Zugriff auf Attribute über die Array-Syntax möglich: $element['attributname']. Alternativ steht die Methode $element->attributes() zur Verfügung, die alle Attribute als Objekt liefert.
SimpleXML vs. DOMDocument vs. XMLReader
PHP bietet drei verschiedene Wege, XML-Daten zu verarbeiten. Jeder hat seine Stärken:
| Bibliothek | Einsatzgebiet | Speicher | Schreiben |
| SimpleXML | Kleine bis mittlere Dateien, Lesen | Hoch (komplett im RAM) | Eingeschränkt |
| DOMDocument | Volle Kontrolle, Lesen und Schreiben | Hoch | Ja |
| XMLReader | Sehr große Dateien (Streaming) | Niedrig | Nein |
Für die meisten Anwendungsfälle reicht SimpleXML völlig aus. Wenn du XML-Daten verändern und zurückschreiben musst, ist DOMDocument die bessere Wahl. Bei sehr großen Dateien (mehrere Hundert MB) solltest du XMLReader einsetzen, der die Datei als Stream verarbeitet und dadurch kaum Arbeitsspeicher braucht.
Häufige Fragen zum XML-Einlesen
Die folgenden Fragen tauchen bei der Arbeit mit XML in PHP regelmäßig auf.
Wie lese ich eine XML-Datei von einer URL?
simplexml_load_file() akzeptiert auch URLs, sofern allow_url_fopen in der php.ini aktiviert ist. Alternativ kannst du den XML-Inhalt per file_get_contents() laden und dann mit simplexml_load_string() parsen.
Wie schreibe ich XML zurück in eine Datei?
Mit $xml->asXML('datei.xml') speicherst du das geänderte XML-Objekt direkt in eine Datei. Ohne Parameter gibt asXML() den XML-String als Rückgabewert zurück.
Was mache ich bei Namespace-Fehlern?
Wenn deine XML-Datei Namespaces verwendet (wie bei RSS-Feeds oder SOAP), musst du diese registrieren: $xml->registerXPathNamespace('ns', '...');. Danach verwendest du den Präfix in XPath-Abfragen.

Fazit
SimpleXML macht das Einlesen von XML-Dateien in PHP unkompliziert. Mit wenigen Zeilen Code lassen sich XML-Daten laden, per foreach durchlaufen und mit XPath gezielt abfragen. Achte dabei immer auf eine saubere Fehlerbehandlung mit libxml_use_internal_errors() und prüfe den Rückgabewert von simplexml_load_file(), bevor du mit den Daten arbeitest.