W3docs

asXML()

Aprende cómo SimpleXMLElement::asXML() de PHP devuelve XML como string o lo escribe en un archivo, con ejemplos y errores comunes.

Introducción

SimpleXMLElement::asXML() es el método que se llama cuando has terminado de construir o modificar XML con SimpleXML y quieres obtener el resultado de vuelta — ya sea como un string que puedes mostrar, devolver o almacenar, o escrito directamente en un archivo. Es esencialmente el inverso de simplexml_load_string(): mientras que la carga convierte texto XML en un object navegable, asXML() convierte ese object de vuelta en texto XML.

Esta página cubre los dos modos en que funciona, qué devuelve, cómo se comporta en un nodo individual frente a todo el documento, y los errores que suelen confundir a la gente (sin formato bonito, sin declaración XML en subnodos).

Sintaxis

// Modo 1: devolver el XML como un string
public SimpleXMLElement::asXML(): string|false

// Modo 2: escribir el XML en un archivo, devolver true/false
public SimpleXMLElement::asXML(string $filename): bool
  • $filename (opcional) — si se proporciona, el XML se escribe en esta ruta y el método devuelve true en caso de éxito o false en caso de fallo. Si se omite, el XML se devuelve como un string.

asXML() y saveXML() son alias — hacen exactamente lo mismo.

Devolver XML como un string

Llama a asXML() sin argumentos para obtener el documento como un string. Este es el uso más común — serializar, luego mostrar, registrar o enviarlo como cuerpo de una respuesta HTTP.

php— editable, runs on the server

Salida:

<?xml version="1.0"?>
<books><book><title>PHP Basics</title><author>John Doe</author></book></books>

Construimos el árbol con addChild() y luego asXML() serializa todo. Nota que la salida está en una sola línea — SimpleXML no aplica sangría ni formato bonito. Consulta Errores comunes más abajo para ver cómo formatearlo.

Llamar a asXML() en un nodo individual

asXML() funciona en cualquier elemento, no solo en la raíz del documento. Llamado en un nodo hijo, serializa únicamente ese nodo y sus descendientes — y, de forma importante, omite la declaración <?xml ... ?>, porque un fragmento no es un documento independiente.

<?php

$xml = new SimpleXMLElement(
    '<books><book><title>PHP Basics</title></book></books>'
);

// Documento completo - incluye la declaración XML
echo $xml->asXML(), "\n";

// Un nodo individual - sin declaración, solo el fragmento
echo $xml->book->title->asXML(), "\n";

Salida:

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

Esto hace que asXML() sea útil para extraer una rama de un documento más grande como su propio fragmento.

Escribir XML en un archivo

Pasa un nombre de archivo y asXML() escribe el documento allí en lugar de devolver un string. El valor de retorno es un boolean que deberías comprobar, ya que la escritura puede fallar (ruta incorrecta, sin permisos, disco lleno).

<?php

$xml = new SimpleXMLElement('<config><host>localhost</host></config>');

if ($xml->asXML('config.xml')) {
    echo "Saved successfully\n";
} else {
    echo "Failed to write file\n";
}

Cuando se le da un nombre de archivo, asXML() devuelve true (no el string XML), así que no intentes mostrar su resultado esperando el marcado.

Errores comunes

  • Sin formato bonito. asXML() emite XML compacto en una sola línea. Para aplicar sangría, pasa el string a DOM:

    <?php
    
    $xml = new SimpleXMLElement('<a><b>hi</b></a>');
    
    $dom = new DOMDocument('1.0');
    $dom->preserveWhiteSpace = false;
    $dom->formatOutput = true;
    $dom->loadXML($xml->asXML());
    
    echo $dom->saveXML();

    Salida:

    <?xml version="1.0"?>
    <a>
      <b>hi</b>
    </a>
  • La salida de subnodos no tiene declaración XML — solo la raíz del documento produce la línea <?xml ... ?>.

  • false significa fallo. Al escribir en un archivo, comprueba siempre el valor boolean devuelto en lugar de asumir que tuvo éxito.

Relacionado

Conclusión

SimpleXMLElement::asXML() serializa un object SimpleXML de vuelta en texto XML. Sin argumento devuelve el marcado como un string; con un nombre de archivo escribe el documento en disco y devuelve un boolean. Recuerda que produce una salida compacta (usa DOM si necesitas sangría) y que llamarlo en un nodo hijo devuelve un fragmento sin declaración.

Práctica

Práctica
¿Cuál es el propósito de la función asXML() en PHP?
¿Cuál es el propósito de la función asXML() en PHP?
Was this page helpful?