Signatur
Beschreibung
simplexml_load_file() parst eine XML-Datei und wandelt sie in ein SimpleXMLElement-Objekt um. Über dieses Objekt kann die gesamte XML-Struktur wie ein verschachteltes PHP-Objekt gelesen werden: Elemente werden als Objekteigenschaften und Attribute über die Methode attributes() zugänglich.
Die Funktion eignet sich besonders für einfache bis mittelkomplexe XML-Dokumente, bei denen kein vollständiges DOM benötigt wird. Sie ist deutlich schlanker als die DOMDocument-API und erlaubt direkten Zugriff auf Element-Inhalte über Eigenschaftsnamen.
Über den Parameter $options lassen sich LibXML-Konstanten übergeben, zum Beispiel LIBXML_NOCDATA, um CDATA-Abschnitte automatisch in normalen Text umzuwandeln. Mit $namespace_or_prefix und $is_prefix kann ein bestimmter XML-Namensraum aktiv gesetzt werden.
Im Fehlerfall (Datei nicht lesbar, ungültiges XML) gibt die Funktion false zurück und erzeugt eine Warnung. Mit libxml_use_internal_errors(true) lassen sich Fehler gezielt abfangen und über libxml_get_errors() auslesen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $filename Pflicht | string | Pfad zur XML-Datei. Kann ein lokaler Dateipfad oder eine URL sein, sofern URL-Wrapper aktiviert sind (allow_url_fopen). |
|
| $class_name | ?string | SimpleXMLElement::class | Name der Klasse, die für das zurückgegebene Objekt verwendet wird. Muss von SimpleXMLElement abgeleitet sein, um eigene Methoden hinzuzufügen. |
| $options | int | 0 | Bitmaske aus LibXML-Konstanten, z. B. LIBXML_NOCDATA oder LIBXML_NOERROR. |
| $namespace_or_prefix | string | XML-Namensraum-URI oder Präfix, der beim Laden berücksichtigt werden soll. | |
| $is_prefix | bool | false | Wenn true, wird $namespace_or_prefix als Namensraum-Präfix interpretiert, andernfalls als URI. |
Rückgabewert
SimpleXMLElement-Objekt zurück, das die geparste XML-Struktur repräsentiert. Bei einem Fehler (Datei nicht gefunden, Parse-Fehler) wird false zurückgegeben.Beispiele
Einfaches Lesen einer XML-Datei
<?php
// books.xml:
// <?xml version="1.0"?>
// <library>
// <book id="1">
// <title>PHP-Handbuch</title>
// <author>Max Mustermann</author>
// </book>
// <book id="2">
// <title>XML für Profis</title>
// <author>Erika Musterfrau</author>
// </book>
// </library>
$xml = simplexml_load_file('books.xml');
if ($xml === false) {
echo 'Fehler beim Laden der XML-Datei.';
exit;
}
foreach ($xml->book as $book) {
$id = (int) $book['id'];
echo "ID: $id, Titel: {$book->title}, Autor: {$book->author}\n";
}
Fehlerbehandlung mit libxml_use_internal_errors
<?php
libxml_use_internal_errors(true);
$xml = simplexml_load_file('ungueltig.xml');
if ($xml === false) {
$fehler = libxml_get_errors();
foreach ($fehler as $f) {
echo 'XML-Fehler in Zeile ' . $f->line . ': ' . trim($f->message) . "\n";
}
libxml_clear_errors();
} else {
echo 'XML erfolgreich geladen.';
}
Erweiterung mit eigener SimpleXMLElement-Subklasse
<?php
class MeinXML extends SimpleXMLElement {
public function getTitelGroß(): string {
return strtoupper((string) $this->title);
}
}
$xml = simplexml_load_file('books.xml', MeinXML::class);
if ($xml !== false) {
echo $xml->book[0]->getTitelGroß();
}
// Wichtig · Fallstricke
Sicherheitshinweis: Wenn die XML-Datei aus einer nicht vertrauenswürdigen Quelle stammt (z. B. Benutzereingabe als URL), besteht die Gefahr von XXE-Angriffen (XML External Entity Injection). Ab PHP 8.0 sind externe Entities standardmäßig deaktiviert. In älteren Versionen sollte libxml_disable_entity_loader(true) vor dem Laden aufgerufen werden.
Bei sehr großen XML-Dateien kann simplexml_load_file() viel Arbeitsspeicher verbrauchen, da das gesamte Dokument in den Speicher geladen wird. Für solche Fälle ist ein SAX-basierter Parser (xml_parse()) oder XMLReader besser geeignet.
CDATA-Abschnitte werden standardmäßig nicht als reiner Text behandelt. Mit der Option LIBXML_NOCDATA werden sie automatisch in normale Textknoten umgewandelt.