W3docs

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
  • $filenameOptional. Wenn angegeben, wird das XML in diese Datei geschrieben und die Methode gibt bei Erfolg true oder bei Fehler false zurü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 string mit dem serialisierten XML, wenn $filename weggelassen wird; ein bool, der den Erfolg anzeigt, wenn $filename angegeben wird. Gibt false nur bei einem Fehler zurück.

SimpleXMLElement::saveXML() ist ein Alias von SimpleXMLElement::asXML() — die beiden Methoden sind austauschbar und akzeptieren dasselbe einzelne optionale $filename-Argument. Beachten Sie, dass im Gegensatz zu DOMDocument::saveXML() die SimpleXML-Version kein $options-Argument akzeptiert; die Übergabe eines solchen löst einen ArgumentCountError aus.

XML als String speichern

Rufen Sie saveXML() ohne Argumente auf, um das Dokument als String zu erhalten:

php— editable, runs on the server

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.

Übungen

Übung
Welche Schritte können in PHP verwendet werden, um eine XML-Datei aus einem PHP-Objekt zu erzeugen?
Welche Schritte können in PHP verwendet werden, um eine XML-Datei aus einem PHP-Objekt zu erzeugen?
Was this page helpful?