saveXML()
SimpleXMLElement::saveXML() converte un oggetto SimpleXMLElement in XML come stringa o file. Scopri sintassi, esempi e pretty-printing in PHP.
Introduzione
SimpleXML è un'estensione PHP che fornisce un'API semplice e facile da usare per lavorare con documenti XML. Il metodo SimpleXMLElement::saveXML() è il modo standard per riconvertire un oggetto SimpleXMLElement in XML — sia come stringa in memoria che come file su disco.
In genere si ricorre a saveXML() alla fine di un flusso di lavoro: dopo aver caricato XML (con simplexml_load_string()) o averlo costruito nodo per nodo (con addChild()), saveXML() serializza il risultato in modo da poterlo restituire, memorizzare o inviare sulla rete.
Questo articolo tratta la firma del metodo, le differenze rispetto ad asXML() e alcuni esempi pratici, incluso il pretty-printing.
Sintassi
public SimpleXMLElement::saveXML(?string $filename = null): string|false$filename— Opzionale. Se fornito, l'XML viene scritto in questo file e il metodo restituiscetruein caso di successo ofalsein caso di errore. La directory di destinazione deve già esistere ed essere scrivibile dal processo PHP. Se omesso (impostazione predefinita), il metodo restituisce l'XML come stringa invece di scrivere un file.- Valore restituito — Una
stringcontenente l'XML serializzato quando$filenameè omesso; unboolche indica il successo quando$filenameè fornito. Restituiscefalsesolo in caso di errore.
SimpleXMLElement::saveXML()è un alias diSimpleXMLElement::asXML()— i due metodi sono intercambiabili e accettano lo stesso singolo argomento opzionale$filename. Si noti che, a differenza diDOMDocument::saveXML(), la versione SimpleXML non accetta un argomento$options; passarne uno genera unArgumentCountError.
Salvare XML in una stringa
Chiama saveXML() senza argomenti per ottenere il documento come stringa:
Questo stampa il documento completo, inclusa la dichiarazione XML:
<?xml version="1.0"?>
<book><title>PHP Basics</title></book>Creiamo un SimpleXMLElement che rappresenta un elemento book con un figlio title, quindi serializziamo l'intero albero in una stringa.
Costruire XML prima di salvarlo
Nel codice reale di solito si costruisce l'albero dinamicamente con addChild() e lo si serializza alla fine:
<?php
$catalog = new SimpleXMLElement('<catalog></catalog>');
$book = $catalog->addChild('book');
$book->addChild('title', 'Learn PHP');
$book->addChild('author', 'W3docs');
echo $catalog->saveXML();Output:
<?xml version="1.0"?>
<catalog><book><title>Learn PHP</title><author>W3docs</author></book></catalog>Salvare XML in un file
Passa un nome file per scrivere il documento direttamente su disco. In questa modalità saveXML() restituisce un boolean, quindi verificalo prima di assumere che la scrittura sia andata a buon fine:
<?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 risultato false indica quasi sempre un problema di permessi o di percorso — la directory non esiste o il processo PHP non può scrivere lì.
Pretty-printing dell'output
SimpleXML serializza tutto su una singola riga e non offre alcun flag di formattazione. Per ottenere XML leggibile e indentato, passa la stringa a DOMDocument, che supporta 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();Output:
<?xml version="1.0"?>
<catalog>
<book>
<title>Learn PHP</title>
</book>
</catalog>Conclusione
SimpleXMLElement::saveXML() è la fase di serializzazione del flusso di lavoro SimpleXML: converte un SimpleXMLElement in una stringa XML o lo scrive in un file utilizzando una sintassi orientata agli oggetti pulita. Ricorda che accetta solo un $filename opzionale, che è un alias di asXML(), e che il pretty-printing deve passare attraverso DOMDocument. Per costruire documenti prima di salvarli, vedi addChild(); per l'API più ampia, consulta la panoramica di SimpleXML.