W3docs

PHP SimpleXML - simplexml_load_file und simplexml_load_string

Die PHP SimpleXML-Erweiterung bietet eine einfache Möglichkeit, XML-Daten zu parsen und zu bearbeiten. Erfahren Sie mehr über simplexml_load_file und simplexml_load_string.

XML mit PHP SimpleXML lesen und abrufen

Die PHP-Erweiterung SimpleXML ist der schnellste Weg, XML-Dokumente zu lesen und zu bearbeiten. Anstatt einen Knotenbaum manuell zu durchlaufen, wandelt SimpleXML das gesamte Dokument in ein reguläres PHP-Objekt um, dessen Elemente Sie mit der vertrauten Eigenschafts- und Array-Syntax erreichen — $xml->title, $xml->item[0], $xml['id'].

Dieses Kapitel behandelt die zwei Funktionen zum Laden von XML — simplexml_load_file() (für eine Datei oder URL) und simplexml_load_string() (für XML, das bereits als String vorliegt) — sowie das Lesen von Elementen, das Lesen von Attributen, das Iterieren über wiederholte Knoten, das Hinzufügen neuer Daten und die Serialisierung des Ergebnisses zurück in XML.

SimpleXML ist im Standard-PHP-Paket enthalten und standardmäßig aktiviert, sodass in der Regel nichts installiert werden muss.

Wann SimpleXML verwenden (und wann nicht)

  • SimpleXML verwenden für das Lesen und leichte Bearbeiten von wohlgeformtem XML: Konfigurationsdateien, RSS/Atom-Feeds, einfache API-Antworten, Sitemaps.
  • DOMDocument verwenden, wenn Sie eine detaillierte Kontrolle benötigen: Knoten an einer bestimmten Position einfügen, mit Kommentaren arbeiten oder Schema-Validierung durchführen.
  • Den XML Parser (Expat) verwenden für sehr große Dokumente, die Sie ereignisweise streamen möchten, ohne alles in den Speicher zu laden.

XML-Daten laden

Der erste Schritt besteht darin, das XML in ein SimpleXML-Objekt zu laden. Es gibt zwei Einstiegspunkte, und welchen Sie wählen, hängt nur davon ab, wo Ihr XML sich aktuell befindet.

Eine XML-Datei mit simplexml_load_file() laden

simplexml_load_file() liest XML aus einem lokalen Pfad oder einer URL und gibt ein SimpleXMLElement zurück. Bei einem Parse-Fehler gibt es false zurück und gibt eine Warnung aus.

<?php

// books.xml on disk, or "https://example.com/feed.xml"
$xml = simplexml_load_file('books.xml');

if ($xml === false) {
    echo "Failed to load XML.";
} else {
    echo $xml->book[0]->title; // first <title>
}

Einen XML-String mit simplexml_load_string() laden

Wenn das XML bereits in einer Variablen vorliegt — zum Beispiel im Body einer HTTP-Antwort — verwenden Sie stattdessen simplexml_load_string().

php— editable, runs on the server

Beide Funktionen geben das Wurzelelement des Dokuments zurück, keine Hülle darum. Im obigen Beispiel ist $xml also <root>, und $xml->child ist der <child>-Knoten darin.

Tipp: Ein SimpleXMLElement hat einen stringähnlichen Wert, ist aber dennoch ein Objekt. Umschließen Sie es mit (string) (oder verketten Sie es), wenn Sie einen einfachen PHP-String benötigen — zum Beispiel $title = (string) $xml->book[0]->title;. Weitere Details finden Sie unter SimpleXML in einen String umwandeln.

Auf XML-Daten zugreifen

Nach dem Laden lesen Sie das Dokument mit Objekt- und Array-Syntax.

Auf Elemente zugreifen

Untergeordnete Elemente sind Objekteigenschaften. Wenn ein Tag mehrfach vorkommt, können Sie wie bei einem Array darauf zugreifen; [0] ist das erste Vorkommen.

<?php

$data = <<<XML
<library>
  <book><title>PHP Basics</title></book>
  <book><title>Advanced XML</title></book>
</library>
XML;

$xml = simplexml_load_string($data);

echo $xml->book[0]->title, "\n"; // PHP Basics
echo $xml->book[1]->title, "\n"; // Advanced XML

Über wiederholte Elemente iterieren

Da sich wiederholende Tags wie eine iterierbare Liste verhalten, ist foreach der natürliche Weg, alle davon zu lesen:

<?php

$data = <<<XML
<library>
  <book><title>PHP Basics</title></book>
  <book><title>Advanced XML</title></book>
</library>
XML;

$xml = simplexml_load_string($data);

foreach ($xml->book as $book) {
    echo $book->title, "\n";
}
// PHP Basics
// Advanced XML

Auf Attribute zugreifen

Auf Attribute wird mit Array-Syntax auf dem Element zugegriffen, das sie enthält:

<?php

$xml = simplexml_load_string('<book id="42" lang="en"><title>PHP</title></book>');

echo $xml['id'], "\n";    // 42
echo $xml['lang'], "\n";  // en

XML-Daten ändern

SimpleXML kann auch Dokumente direkt erstellen und bearbeiten.

Elemente hinzufügen

addChild() fügt ein neues Element an und gibt das erstellte Element zurück, sodass Sie weiter verketten können:

<?php

$xml = simplexml_load_string('<root></root>');
$xml->addChild('child', 'Value');

echo $xml->child; // Value

Attribute hinzufügen

addAttribute() fügt dem Element, auf dem Sie es aufrufen, ein Attribut hinzu:

<?php

$xml = simplexml_load_string('<root><child>Value</child></root>');
$xml->child->addAttribute('attribute', 'on');

echo $xml->child['attribute']; // on

SimpleXML zurück in XML umwandeln

asXML() serialisiert das Objekt zurück in einen XML-String (ohne Argument) oder schreibt es direkt in eine Datei (wenn Sie einen Pfad übergeben). So speichern Sie die vorgenommenen Änderungen. Weitere Informationen finden Sie unter der asXML-Methode.

<?php

$xml = simplexml_load_string('<root></root>');
$xml->addChild('child', 'Value');

echo $xml->asXML();
// <?xml version="1.0"?>
// <root><child>Value</child></root>

Fehlerhafte XML-Daten behandeln

Bei einem Fehler geben diese Funktionen false zurück und lösen eine Warnung aus, auf die schwer zu reagieren ist. Wandeln Sie Warnungen mit libxml_use_internal_errors() in sammelbare Fehler um:

<?php

libxml_use_internal_errors(true);

$xml = simplexml_load_string('<root><child></root>'); // missing </child>

if ($xml === false) {
    foreach (libxml_get_errors() as $error) {
        echo trim($error->message), "\n";
    }
    libxml_clear_errors();
}

Fazit

SimpleXML ist der schnellste Weg von einer XML-Datei oder einem String zu lesbaren PHP-Daten. Laden Sie mit simplexml_load_file() oder simplexml_load_string(), lesen Sie Elemente und Attribute mit Eigenschafts- und Array-Syntax, iterieren Sie über wiederholte Knoten mit foreach, bearbeiten Sie mit addChild() und addAttribute(), und serialisieren Sie mit asXML() zurück. Für komplexere Verarbeitung wechseln Sie zu DOMDocument; für das Streaming großer Dateien verwenden Sie den XML Parser.

Übungen

Übung
Welche Methode verwendet die PHP-Erweiterung SimpleXML, um eine XML-Datei zu parsen?
Welche Methode verwendet die PHP-Erweiterung SimpleXML, um eine XML-Datei zu parsen?
Was this page helpful?