saveXML()
SimpleXMLElement::saveXML() serialisiert ein SimpleXMLElement-Objekt als XML-String oder schreibt es direkt in eine Datei.
Einführung
SimpleXML ist eine PHP-Erweiterung, die eine einfache und benutzerfreundliche API für die Arbeit mit XML-Dokumenten bereitstellt. Die Methode SimpleXMLElement::saveXML() ist der Standardweg, um ein SimpleXMLElement-Objekt wieder in XML umzuwandeln — entweder als String im Speicher oder als Datei auf der Festplatte.
saveXML() wird typischerweise am Ende eines Workflows verwendet: nachdem Sie XML geladen haben (mit simplexml_load_string()) oder es Knoten für Knoten aufgebaut haben (mit addChild()), serialisiert saveXML() das Ergebnis, damit Sie es zurückgeben, speichern oder über das Netzwerk senden können.
Dieser Artikel behandelt die Signatur der Methode, den Unterschied zu asXML() sowie praktische Beispiele einschließlich der formatierten Ausgabe.
Syntax
public SimpleXMLElement::saveXML(?string $filename = null): string|false$filename— Optional. Wenn angegeben, wird das XML in diese Datei geschrieben und die Methode gibt bei Erfolgtrueoder bei Fehlerfalsezurück. Das Zielverzeichnis muss bereits existieren und vom PHP-Prozess beschreibbar sein. Wenn weggelassen (Standard), gibt die Methode das XML als String zurück, anstatt eine Datei zu schreiben.- Rückgabewert — Ein
stringmit dem serialisierten XML, wenn$filenameweggelassen wird; einbool, der den Erfolg anzeigt, wenn$filenameangegeben wird. Gibtfalsenur bei einem Fehler zurück.
SimpleXMLElement::saveXML()ist ein Alias vonSimpleXMLElement::asXML()— die beiden Methoden sind austauschbar und akzeptieren dasselbe einzelne optionale$filename-Argument. Beachten Sie, dass im Gegensatz zuDOMDocument::saveXML()die SimpleXML-Version kein$options-Argument akzeptiert; die Übergabe eines solchen löst einenArgumentCountErroraus.
XML als String speichern
Rufen Sie saveXML() ohne Argumente auf, um das Dokument als String zu erhalten:
Dies gibt das vollständige Dokument aus, einschließlich der XML-Deklaration:
<?xml version="1.0"?>
<book><title>PHP Basics</title></book>Wir erstellen ein SimpleXMLElement, das ein book-Element mit einem title-Kindelement darstellt, und serialisieren dann den gesamten Baum zurück in einen String.
XML vor dem Speichern aufbauen
Im echten Code wird der Baum normalerweise dynamisch mit addChild() aufgebaut und am Ende serialisiert:
<?php
$catalog = new SimpleXMLElement('<catalog></catalog>');
$book = $catalog->addChild('book');
$book->addChild('title', 'Learn PHP');
$book->addChild('author', 'W3docs');
echo $catalog->saveXML();Ausgabe:
<?xml version="1.0"?>
<catalog><book><title>Learn PHP</title><author>W3docs</author></book></catalog>XML in eine Datei speichern
Übergeben Sie einen Dateinamen, um das Dokument direkt auf die Festplatte zu schreiben. In diesem Modus gibt saveXML() einen boolean zurück, also prüfen Sie diesen, bevor Sie davon ausgehen, dass der Schreibvorgang erfolgreich war:
<?php
$xml = new SimpleXMLElement('<book><title>PHP Basics</title></book>');
$success = $xml->saveXML('output.xml');
if ($success) {
echo "XML saved successfully.";
} else {
echo "Failed to save XML.";
}Ein false-Ergebnis bedeutet fast immer ein Berechtigungs- oder Pfadproblem — das Verzeichnis existiert nicht, oder der PHP-Prozess kann nicht dorthin schreiben.
Ausgabe formatieren
SimpleXML serialisiert alles in einer einzigen Zeile und bietet kein Formatierungsflag. Um ein menschenlesbares, eingerücktes XML zu erhalten, übergeben Sie den String an DOMDocument, das formatOutput unterstützt:
<?php
$xml = new SimpleXMLElement('<catalog><book><title>Learn PHP</title></book></catalog>');
$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($xml->saveXML());
echo $dom->saveXML();Ausgabe:
<?xml version="1.0"?>
<catalog>
<book>
<title>Learn PHP</title>
</book>
</catalog>Fazit
SimpleXMLElement::saveXML() ist der Serialisierungsschritt des SimpleXML-Workflows: Er konvertiert ein SimpleXMLElement in einen XML-String oder schreibt es mit sauberer objektorientierter Syntax in eine Datei. Beachten Sie, dass es nur ein optionales $filename akzeptiert, dass es ein Alias von asXML() ist, und dass die formatierte Ausgabe über DOMDocument erfolgen muss. Zum Aufbau von Dokumenten vor dem Speichern siehe addChild(); für die umfassendere API siehe die SimpleXML-Übersicht.