PHP XML Parser
PHP ermöglicht die Arbeit mit XML zum Speichern und Übertragen von Daten. Lernen Sie SimpleXML, Syntax und praktische Beispiele kennen.
PHP ist eine beliebte Skriptsprache für die Webentwicklung, mit der Entwickler dynamische Websites erstellen können, indem sie Code in HTML einbetten. Eine der nützlichsten Funktionen ist die Möglichkeit, mit XML zu arbeiten – einer Auszeichnungssprache, die zum Speichern und Übertragen von Daten entwickelt wurde.
In diesem Leitfaden behandeln wir die XML-Funktionalität von PHP, einschließlich der Vorteile, Syntax und Anwendungsbeispiele. Am Ende werden Sie verstehen, wie Sie mit XML bessere Websites und Anwendungen erstellen können.
Was ist XML?
XML steht für "eXtensible Markup Language". Es ist eine Auszeichnungssprache, mit der Entwickler eigene Tags und Dokumentstrukturen definieren können, was sie zu einer äußerst flexiblen und anpassbaren Sprache macht. XML wird häufig zum Speichern und Übertragen von Daten verwendet, beispielsweise in Webdiensten, Datenbanken und RSS-Feeds.
XML ähnelt HTML, aber während HTML definiert, wie Webseiten in einem Browser angezeigt werden, definiert XML die Struktur und den Inhalt von Daten. XML-Tags werden verwendet, um Datenelemente und ihre Beziehungen zu identifizieren, was die Übertragung von Daten zwischen verschiedenen Systemen erleichtert.
Vorteile der Verwendung von XML in PHP
Die Verwendung von XML in PHP bietet mehrere Vorteile, darunter:
- Datenaustausch: XML ist ein ideales Format für den Datenaustausch zwischen verschiedenen Systemen und Plattformen. Da XML plattformunabhängig ist, können Daten unabhängig vom verwendeten Betriebssystem oder der Programmiersprache einfach zwischen Systemen übertragen werden.
- Datenspeicherung: XML ist eine großartige Möglichkeit, Daten in einem strukturierten Format zu speichern und zu organisieren. Durch die Verwendung von XML zur Datenspeicherung können Entwickler die Daten bei Bedarf einfach abrufen und bearbeiten.
- Datentransformation: XML kann mit XSLT (Extensible Stylesheet Language Transformations) einfach in andere Formate wie HTML, PDF und CSV umgewandelt werden.
Syntax von XML in PHP
Um mit XML in PHP zu arbeiten, müssen Sie mit der Syntax vertraut sein, die zur Definition von XML-Dokumenten verwendet wird. XML-Dokumente bestehen aus Elementen, Attributen und Werten.
Elemente werden mit öffnenden und schließenden Tags definiert, wie <book> und </book>. Elemente können auch untergeordnete Elemente enthalten, wie zum Beispiel:
<book>
<title>The Great Gatsby</title>
<author>F. Scott Fitzgerald</author>
</book>Attribute werden verwendet, um zusätzliche Informationen über Elemente bereitzustellen, wie zum Beispiel:
<book id="1234">
<title>The Great Gatsby</title>
<author>F. Scott Fitzgerald</author>
</book>Werte sind der Inhalt eines Elements, wie "The Great Gatsby" oder "F. Scott Fitzgerald".
Welchen XML-Ansatz sollten Sie verwenden?
PHP liefert drei Parser, und die Wahl des richtigen ist wichtig:
- SimpleXML — die einfachste API. Sie wandelt ein XML-Dokument in einen Objektbaum um, den Sie mit normaler Property-Syntax navigieren (
$xml->book->title). Am besten für kleine bis mittlere Dokumente mit bekannter Struktur geeignet. Dieser Leitfaden konzentriert sich auf SimpleXML; siehe PHP SimpleXML für eine ausführlichere Referenz. - DOMDocument (die DOM-Erweiterung) — eine vollständige W3C DOM-Implementierung. Ausführlicher, ermöglicht aber das präzise Erstellen, Verschieben und Entfernen von Knoten und ist für XSLT und Validierung erforderlich. Siehe PHP XML DOM.
- XMLReader / XMLWriter — ein streaming, pull-basierter Parser. Er liest jeweils einen Knoten, anstatt den gesamten Baum in den Speicher zu laden, und ist daher die richtige Wahl für sehr große Dateien (Hunderte von MB), bei denen SimpleXML und DOM den Speicher erschöpfen würden.
Die historischen xml_parser_create() SAX-Funktionen existieren noch, werden aber in neuem Code selten verwendet; SimpleXML deckt dasselbe Gebiet mit viel weniger Boilerplate ab.
Ein XML-Dokument mit SimpleXML lesen
Um eine XML-Datei in einen Objektbaum zu laden, verwenden Sie die Funktion simplexml_load_file(). Wenn die Quelle ein String ist (zum Beispiel eine API-Antwort) und keine Datei, verwenden Sie stattdessen simplexml_load_string().
Überprüfen Sie immer den Rückgabewert: Bei einem fehlerhaften Dokument geben beide Funktionen false zurück, anstatt eine Ausnahme zu werfen, daher ist ein nicht geprüftes Ergebnis eine häufige Quelle stiller Fehler.
$xml = simplexml_load_file("books.xml");
if ($xml === false) {
echo "Failed to load XML file.";
exit;
}Dadurch wird die XML-Datei gelesen und in ein SimpleXMLElement-Objekt umgewandelt, auf das Sie mit der objektorientierten Syntax von PHP zugreifen. Untergeordnete Elemente werden zu Properties, und wiederholte Elemente (wie mehrere <book>-Tags) verhalten sich wie eine iterierbare Liste.
Attribute lesen
Attribute sind keine Properties — Sie lesen sie mit der Array-Syntax auf dem Element. Bei <book id="1234"> ist die id $book['id']:
$xml = simplexml_load_string('<book id="1234"><title>The Great Gatsby</title></book>');
echo $xml['id']; // 1234
echo $xml->title; // The Great GatsbyBeachten Sie, dass SimpleXML-Werte Objekte und keine einfachen Strings sind. Casten Sie mit (string), wenn Sie einen echten String benötigen (zum Beispiel vor einem strikten Vergleich oder json_encode).
Ein XML-Dokument mit SimpleXML schreiben
Um XML von Grund auf zu erstellen, erstellen Sie ein SimpleXMLElement mit einem Root-Element und fügen Sie Kinder mit addChild() hinzu:
$xml = new SimpleXMLElement('<books></books>');
$book = $xml->addChild('book');
$book->addChild('title', 'The Great Gatsby');
$book->addChild('author', 'F. Scott Fitzgerald');
$xml->asXML('books.xml');Dadurch wird ein SimpleXMLElement mit dem Root-Element <books> erstellt, ein <book>-Kind mit <title>- und <author>-Kindern hinzugefügt und das Dokument in books.xml gespeichert. Der Aufruf von asXML() ohne Argument gibt das XML als String zurück, anstatt eine Datei zu schreiben, was praktisch ist, wenn Sie es in einer HTTP-Antwort senden möchten.
Anwendungsbeispiele
Schauen wir uns einige praktische Beispiele zur Verwendung von XML in PHP an.
XML-Daten lesen
Angenommen, Sie haben eine XML-Datei namens "books.xml" mit folgenden Daten:
<books>
<book>
<title>The Great Gatsby</title>
<author>F. Scott Fitzgerald</author>
</book>
<book>
<title>To Kill a Mockingbird</title>
<author>Harper Lee</author>
</book>
</books>Um diese Daten in PHP zu lesen, können Sie die Funktion simplexml_load_file() verwenden:
$xml = simplexml_load_file("books.xml");
if ($xml === false) {
echo "Failed to load XML file.";
exit;
}
foreach ($xml->book as $book) {
echo $book->title . " by " . $book->author . "\n";
}Dieser Code lädt die XML-Datei in ein SimpleXMLElement-Objekt und iteriert dann mit einer foreach-Schleife über jedes <book>-Element. Innerhalb der Schleife werden die untergeordneten Elemente <title> und <author> mit objektorientierter Syntax aufgerufen und in der Konsole ausgegeben.
XML-Daten schreiben
Angenommen, Sie möchten eine neue XML-Datei mit folgenden Daten erstellen:
<colors>
<color>
<name>Red</name>
<hex>#FF0000</hex>
</color>
<color>
<name>Green</name>
<hex>#00FF00</hex>
</color>
<color>
<name>Blue</name>
<hex>#0000FF</hex>
</color>
</colors>Um diese XML-Daten in PHP zu erstellen, können Sie die Klasse SimpleXMLElement verwenden:
$xml = new SimpleXMLElement('<colors></colors>');
$red = $xml->addChild('color');
$red->addChild('name', 'Red');
$red->addChild('hex', '#FF0000');
$green = $xml->addChild('color');
$green->addChild('name', 'Green');
$green->addChild('hex', '#00FF00');
$blue = $xml->addChild('color');
$blue->addChild('name', 'Blue');
$blue->addChild('hex', '#0000FF');
$xml->asXML('colors.xml');Dieser Code erstellt ein neues SimpleXMLElement-Objekt mit dem Root-Element <colors>. Dann fügt er drei untergeordnete Elemente <color> hinzu, jedes mit zwei untergeordneten Elementen <name> und <hex>, und setzt ihre Werte entsprechend. Schließlich speichert er das XML-Dokument in einer Datei namens "colors.xml".
Häufige Fallstricke
- Nicht geprüftes Ladeergebnis.
simplexml_load_file()undsimplexml_load_string()geben bei einem Parse-Fehlerfalseund nichtnullzurück. Testen Sie mit=== false, bevor Sie das Ergebnis verwenden. - Werte sind Objekte, keine Strings.
$xml->titleist einSimpleXMLElement. Es funktioniert in String-Kontexten (echo, Verkettung), schlägt aber bei überraschenden Vergleichen fehl; casten Sie mit(string), wenn Sie unsicher sind. - Unterdrückte Parse-Fehler. Um zu untersuchen, warum das Parsen fehlgeschlagen ist, rufen Sie vor dem Laden
libxml_use_internal_errors(true)auf und lesen Sie dannlibxml_get_errors(). - Namespaces. Wenn Ihr XML Namespaces verwendet (z.B.
xmlns:), findet der normale Property-Zugriff die Elemente nicht — verwenden Siechildren()oderxpath()mit dem registrierten Namespace. - Nicht vertrauenswürdige Eingaben. Parsen Sie XML aus nicht vertrauenswürdigen Quellen nicht unvorsichtig: External-Entity-Angriffe (XXE) sind ein echtes Risiko. Im modernen PHP ist das relevante Entity-Laden standardmäßig deaktiviert, aber überprüfen Sie dies, bevor Sie vom Benutzer bereitgestelltes XML verarbeiten.
Verwandte Themen
- PHP SimpleXML — vollständige Referenz für die SimpleXML-Erweiterung.
- simplexml_load_file() und simplexml_load_string() — die beiden Ladefunktionen im Detail.
- PHP XML DOM — die leistungsstärkere DOMDocument-API.
- PHP JSON — die schlankere Alternative für den Datenaustausch.
Fazit
In diesem Leitfaden haben wir behandelt, was XML ist, warum es nützlich ist und wie man XML in PHP mit der SimpleXML-Bibliothek liest, schreibt und bearbeitet, sowie die häufigen Fallstricke, auf die man achten sollte. SimpleXML ist der schnellste Weg, um strukturierte XML-Daten in PHP zu verarbeiten; greifen Sie auf DOMDocument zurück, wenn Sie eine fein abgestufte Knotensteuerung benötigen, und auf XMLReader für sehr große Dateien. Beachten Sie, dass die XML-Funktionen von PHP die libxml-Erweiterung erfordern, die in den meisten Standardinstallationen standardmäßig aktiviert ist.