W3docs

saveXML()

saveXML() es un método de SimpleXML en PHP para serializar un objeto SimpleXMLElement a una cadena XML o guardarlo en un archivo.

Introducción

SimpleXML es una extensión de PHP que proporciona una API sencilla y fácil de usar para trabajar con documentos XML. El método SimpleXMLElement::saveXML() es la forma estándar de convertir un objeto SimpleXMLElement de vuelta en XML, ya sea como una cadena en memoria o como un archivo en disco.

Normalmente se utiliza saveXML() al final de un flujo de trabajo: después de cargar XML (con simplexml_load_string()) o de construirlo nodo a nodo (con addChild()), saveXML() serializa el resultado para que puedas devolverlo, almacenarlo o enviarlo por la red.

Este artículo cubre la firma del método, en qué se diferencia de asXML(), y recetas prácticas que incluyen el formateo con sangría.

Sintaxis

public SimpleXMLElement::saveXML(?string $filename = null): string|false
  • $filenameOpcional. Si se proporciona, el XML se escribe en este archivo y el método devuelve true en caso de éxito o false en caso de error. El directorio de destino debe existir y ser escribible por el proceso PHP. Si se omite (valor por defecto), el método devuelve el XML como una cadena en lugar de escribir un archivo.
  • Valor de retorno — Una string que contiene el XML serializado cuando se omite $filename; un bool que indica el éxito cuando se proporciona $filename. Devuelve false solo en caso de error.

SimpleXMLElement::saveXML() es un alias de SimpleXMLElement::asXML() — los dos métodos son intercambiables y aceptan el mismo argumento opcional $filename. Ten en cuenta que, a diferencia de DOMDocument::saveXML(), la versión de SimpleXML no acepta un argumento $options; pasar uno lanza un ArgumentCountError.

Guardar XML en una cadena

Llama a saveXML() sin argumentos para obtener el documento como una cadena:

php— editable, runs on the server

Esto imprime el documento completo, incluida la declaración XML:

<?xml version="1.0"?>
<book><title>PHP Basics</title></book>

Creamos un SimpleXMLElement que representa un elemento book con un hijo title, y luego serializamos todo el árbol de vuelta a una cadena.

Construir XML antes de guardarlo

En código real, normalmente se construye el árbol dinámicamente con addChild() y se serializa al final:

<?php

$catalog = new SimpleXMLElement('<catalog></catalog>');

$book = $catalog->addChild('book');
$book->addChild('title', 'Learn PHP');
$book->addChild('author', 'W3docs');

echo $catalog->saveXML();

Salida:

<?xml version="1.0"?>
<catalog><book><title>Learn PHP</title><author>W3docs</author></book></catalog>

Guardar XML en un archivo

Pasa un nombre de archivo para escribir el documento directamente en disco. En este modo, saveXML() devuelve un booleano, así que compruébalo antes de asumir que la escritura fue exitosa:

<?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 resultado false casi siempre significa un problema de permisos o de ruta: el directorio no existe o el proceso PHP no puede escribir en él.

Formatear la salida con sangría

SimpleXML serializa todo en una sola línea y no ofrece ningún indicador de formato. Para obtener XML legible con sangría, pasa la cadena a DOMDocument, que admite 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();

Salida:

<?xml version="1.0"?>
<catalog>
  <book>
    <title>Learn PHP</title>
  </book>
</catalog>

Conclusión

SimpleXMLElement::saveXML() es el paso de serialización del flujo de trabajo de SimpleXML: convierte un SimpleXMLElement en una cadena XML o lo escribe en un archivo usando una sintaxis orientada a objetos limpia. Recuerda que solo acepta un $filename opcional, que es un alias de asXML(), y que el formateo con sangría debe hacerse a través de DOMDocument. Para construir documentos antes de guardarlos, consulta addChild(); para la API completa, consulta la descripción general de SimpleXML.

Práctica

Práctica
En PHP, ¿qué pasos se pueden seguir para generar un archivo XML a partir de un objeto PHP?
En PHP, ¿qué pasos se pueden seguir para generar un archivo XML a partir de un objeto PHP?
Was this page helpful?