W3docs

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
  • $filenameOptionnel. S'il est fourni, le XML est écrit dans ce fichier et la méthode retourne true en cas de succès ou false en 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 string contenant le XML sérialisé lorsque $filename est omis ; un bool indiquant le succès lorsque $filename est fourni. Retourne false uniquement en cas d'échec.

SimpleXMLElement::saveXML() est un alias de SimpleXMLElement::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 une ArgumentCountError.

Enregistrer du XML dans une chaîne

Appelez saveXML() sans arguments pour obtenir le document sous forme de chaîne :

php— editable, runs on the server

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.

Pratique

Pratique
En PHP, quelles étapes permettent de générer un fichier XML à partir d'un objet PHP ?
En PHP, quelles étapes permettent de générer un fichier XML à partir d'un objet PHP ?
Was this page helpful?