saveXML()
SimpleXML é uma extensão PHP para trabalhar com XML. O método SimpleXMLElement::saveXML() serializa um objeto em XML como string ou arquivo.
Introdução
SimpleXML é uma extensão PHP que fornece uma API simples e fácil de usar para trabalhar com documentos XML. O método SimpleXMLElement::saveXML() é a forma padrão de converter um objeto SimpleXMLElement de volta para XML — seja como uma string na memória ou como um arquivo em disco.
Normalmente você recorre ao saveXML() no final de um fluxo de trabalho: após carregar XML (com simplexml_load_string()) ou construí-lo nó a nó (com addChild()), o saveXML() serializa o resultado para que você possa retorná-lo, armazená-lo ou enviá-lo pela rede.
Este artigo abrange a assinatura do método, como ele difere do asXML(), e exemplos práticos incluindo formatação legível.
Sintaxe
public SimpleXMLElement::saveXML(?string $filename = null): string|false$filename— Opcional. Se fornecido, o XML é gravado neste arquivo e o método retornatrueem caso de sucesso oufalseem caso de falha. O diretório de destino deve já existir e ser gravável pelo processo PHP. Se omitido (padrão), o método retorna o XML como uma string em vez de gravar um arquivo.- Valor de retorno — Uma
stringcontendo o XML serializado quando$filenameé omitido; umboolindicando sucesso quando$filenameé fornecido. Retornafalsesomente em caso de falha.
SimpleXMLElement::saveXML()é um alias deSimpleXMLElement::asXML()— os dois métodos são intercambiáveis e aceitam o mesmo argumento opcional$filename. Note que, ao contrário deDOMDocument::saveXML(), a versão SimpleXML não aceita um argumento$options; passar um lança umArgumentCountError.
Salvando XML em uma string
Chame saveXML() sem argumentos para obter o documento como uma string:
Isso imprime o documento completo, incluindo a declaração XML:
<?xml version="1.0"?>
<book><title>PHP Basics</title></book>Criamos um SimpleXMLElement representando um elemento book com um filho title, em seguida serializamos toda a árvore de volta para uma string.
Construindo XML antes de salvar
No código real, você normalmente constrói a árvore dinamicamente com addChild() e a serializa no final:
<?php
$catalog = new SimpleXMLElement('<catalog></catalog>');
$book = $catalog->addChild('book');
$book->addChild('title', 'Learn PHP');
$book->addChild('author', 'W3docs');
echo $catalog->saveXML();Saída:
<?xml version="1.0"?>
<catalog><book><title>Learn PHP</title><author>W3docs</author></book></catalog>Salvando XML em um arquivo
Passe um nome de arquivo para gravar o documento diretamente em disco. Neste modo, saveXML() retorna um booleano, então verifique-o antes de assumir que a gravação foi bem-sucedida:
<?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.";
}Um resultado false quase sempre significa um problema de permissões ou de caminho — o diretório não existe ou o processo PHP não consegue gravar nele.
Formatando a saída de forma legível
O SimpleXML serializa tudo em uma única linha e não oferece nenhuma opção de formatação. Para obter XML legível e indentado, passe a string para DOMDocument, que sim suporta 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();Saída:
<?xml version="1.0"?>
<catalog>
<book>
<title>Learn PHP</title>
</book>
</catalog>Conclusão
SimpleXMLElement::saveXML() é a etapa de serialização do fluxo de trabalho SimpleXML: converte um SimpleXMLElement em uma string XML ou o grava em um arquivo usando uma sintaxe orientada a objetos clara. Lembre-se de que ele aceita apenas um $filename opcional, que é um alias de asXML(), e que a formatação legível deve passar pelo DOMDocument. Para construir documentos antes de salvar, consulte addChild(); para a API mais ampla, consulte a visão geral do SimpleXML.