saveXML()
Apprenez à utiliser SimpleXMLElement::saveXML() en PHP pour sérialiser du XML en chaîne ou en fichier, avec des exemples pratiques.
Introduction
SimpleXML est une extension PHP qui fournit une API simple et facile à utiliser pour travailler avec des documents XML. La méthode SimpleXMLElement::saveXML() est le moyen standard pour convertir un objet SimpleXMLElement en XML — soit sous forme de chaîne en mémoire, soit sous forme de fichier sur disque.
On recourt généralement à saveXML() à la fin d'un flux de travail : après avoir chargé du XML (avec simplexml_load_string()) ou l'avoir construit nœud par nœud (avec addChild()), saveXML() sérialise le résultat afin de pouvoir le retourner, le stocker ou l'envoyer sur le réseau.
Cet article couvre la signature de la méthode, en quoi elle diffère de asXML(), ainsi que des recettes pratiques incluant la mise en forme lisible.
Syntaxe
public SimpleXMLElement::saveXML(?string $filename = null): string|false$filename— Optionnel. S'il est fourni, le XML est écrit dans ce fichier et la méthode retournetrueen cas de succès oufalseen cas d'échec. Le répertoire cible doit déjà exister et être accessible en écriture par le processus PHP. S'il est omis (par défaut), la méthode retourne le XML sous forme de chaîne au lieu d'écrire un fichier.- Valeur de retour — Une
stringcontenant le XML sérialisé lorsque$filenameest omis ; unboolindiquant le succès lorsque$filenameest fourni. Retournefalseuniquement en cas d'échec.
SimpleXMLElement::saveXML()est un alias deSimpleXMLElement::asXML()— les deux méthodes sont interchangeables et acceptent le même argument optionnel$filename. Notez que, contrairement àDOMDocument::saveXML(), la version SimpleXML n'accepte pas d'argument$options; en passer un déclenche uneArgumentCountError.
Enregistrer du XML dans une chaîne
Appelez saveXML() sans arguments pour obtenir le document sous forme de chaîne :
Ceci affiche le document complet, y compris la déclaration XML :
<?xml version="1.0"?>
<book><title>PHP Basics</title></book>Nous créons un SimpleXMLElement représentant un élément book avec un enfant title, puis nous sérialisons l'ensemble de l'arbre en chaîne.
Construire du XML avant de l'enregistrer
Dans un vrai projet, on construit généralement l'arbre dynamiquement avec addChild() et on le sérialise à la fin :
<?php
$catalog = new SimpleXMLElement('<catalog></catalog>');
$book = $catalog->addChild('book');
$book->addChild('title', 'Learn PHP');
$book->addChild('author', 'W3docs');
echo $catalog->saveXML();Résultat :
<?xml version="1.0"?>
<catalog><book><title>Learn PHP</title><author>W3docs</author></book></catalog>Enregistrer du XML dans un fichier
Passez un nom de fichier pour écrire le document directement sur le disque. Dans ce mode, saveXML() retourne un booléen, vérifiez donc le résultat avant de supposer que l'écriture a réussi :
<?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.";
}Un résultat false signifie presque toujours un problème de permissions ou de chemin — le répertoire n'existe pas ou le processus PHP ne peut pas y écrire.
Mise en forme lisible de la sortie
SimpleXML sérialise tout sur une seule ligne et n'offre aucun indicateur de formatage. Pour obtenir un XML indenté et lisible par un humain, passez la chaîne à DOMDocument, qui prend en charge formatOutput :
<?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();Résultat :
<?xml version="1.0"?>
<catalog>
<book>
<title>Learn PHP</title>
</book>
</catalog>Conclusion
SimpleXMLElement::saveXML() est l'étape de sérialisation du flux de travail SimpleXML : elle convertit un SimpleXMLElement en chaîne XML ou l'écrit dans un fichier grâce à une syntaxe orientée objet claire. Rappelez-vous qu'elle n'accepte qu'un $filename optionnel, qu'elle est un alias de asXML(), et que la mise en forme lisible doit passer par DOMDocument. Pour la construction de documents avant l'enregistrement, voir addChild() ; pour l'API complète, voir la présentation de SimpleXML.