W3docs

simplexml_load_file()

SimpleXML es una extensión de PHP que proporciona una API sencilla para trabajar con documentos XML. Aprende a usar simplexml_load_file().

Introducción

simplexml_load_file() lee un archivo XML del disco (o una URL) y convierte su contenido en un objeto SimpleXMLElement que puedes navegar con la sintaxis habitual de propiedades y arrays de PHP. Es el punto de entrada basado en archivos de la extensión SimpleXML — la forma más sencilla de convertir un documento XML en algo sobre lo que puedas iterar y leer.

Úsala siempre que tengas un archivo XML — un archivo de configuración, un feed RSS/Atom, una respuesta de API guardada en disco, o un sitemap — y quieras extraer valores sin escribir un analizador a mano. Si tu XML está en una cadena en lugar de un archivo, usa su función hermana simplexml_load_string().

Este capítulo cubre la firma de la función, un ejemplo completo y funcional (incluido el XML que lee), cómo acceder a atributos y espacios de nombres, y cómo gestionar los errores de carga de forma limpia.

Sintaxis

simplexml_load_file(
    string $filename,
    ?string $class_name = SimpleXMLElement::class,
    int $options = 0,
    string $namespace_or_prefix = "",
    bool $is_prefix = false
): SimpleXMLElement|false
ParámetroDescripción
$filenameRuta o URL del archivo XML a cargar.
$class_nameClase a instanciar. Debe extender SimpleXMLElement; por defecto es SimpleXMLElement.
$optionsMáscara de bits de constantes de opciones libxml como LIBXML_NOCDATA o LIBXML_NOBLANKS.
$namespace_or_prefixPrefijo de espacio de nombres o URI para restringir el árbol devuelto.
$is_prefixtrue si el argumento anterior es un prefijo, false si es un URI.

Valor de retorno: un SimpleXMLElement en caso de éxito, o false si el archivo no se puede leer o contiene XML malformado.

Un ejemplo completo

Supón que hay un archivo llamado books.xml junto a tu script:

<?xml version="1.0" encoding="UTF-8"?>
<library>
  <book id="b1">
    <title>The PHP Way</title>
    <author>Jane Doe</author>
    <price currency="USD">29.99</price>
  </book>
  <book id="b2">
    <title>XML in Practice</title>
    <author>John Smith</author>
    <price currency="EUR">24.50</price>
  </book>
</library>

Cárgalo, confirma que se analizó correctamente e itera sobre los elementos <book>:

<?php

$xml = simplexml_load_file('books.xml');

if ($xml === false) {
    echo "Failed to load XML file.\n";
    exit(1);
}

foreach ($xml->book as $book) {
    echo $book->title . " by " . $book->author . "\n";
}

Salida:

The PHP Way by Jane Doe
XML in Practice by John Smith

Observa la comparación estricta === false. Los objetos SimpleXML son "verdaderos", por lo que una comprobación con if (!$xml) puede fallar en casos límite — compara siempre explícitamente contra false.

Lectura de atributos

SimpleXML expone los elementos hijo como propiedades del objeto ($book->title) y los atributos XML mediante acceso de tipo array ($book['id']). Como los valores son objetos SimpleXMLElement en lugar de cadenas simples, conviértelos con (string) antes de usarlos en cálculos o comparaciones:

<?php

$xml = simplexml_load_file('books.xml');

foreach ($xml->book as $book) {
    $id       = (string) $book['id'];
    $currency = (string) $book->price['currency'];
    echo "{$id}: {$book->title} — {$book->price} {$currency}\n";
}

Salida:

b1: The PHP Way — 29.99 USD
b2: XML in Practice — 24.50 EUR

Trabajo con espacios de nombres

Cuando un documento declara espacios de nombres XML, el acceso mediante propiedades simples solo alcanza el espacio de nombres predeterminado. Usa ->children($namespaceUri) para descender a una rama con espacio de nombres y ->attributes($namespaceUri) para leer atributos con espacio de nombres:

<?php
// Access elements in the Atom namespace.
$atom = $xml->children('http://www.w3.org/2005/Atom');
echo $atom->title;

Para profundizar en espacios de nombres y recorridos, consulta SimpleXML en PHP.

Manejo de errores de carga de forma limpia

Por defecto, el XML malformado emite advertencias de PHP. Para suprimirlas e inspeccionar los errores tú mismo, activa el manejo interno de errores con libxml_use_internal_errors() antes de cargar:

<?php

libxml_use_internal_errors(true);

$xml = simplexml_load_file('missing.xml');

if ($xml === false) {
    echo "Could not load the file:\n";
    foreach (libxml_get_errors() as $error) {
        echo "  " . trim($error->message) . "\n";
    }
    libxml_clear_errors();
}

Salida:

Could not load the file:
  failed to load external entity "missing.xml"

Este patrón mantiene la salida limpia y te da acceso estructurado a cada error de análisis mediante libxml_get_errors().

Errores comunes

  • false vs. advertencia. Un archivo inexistente o un error de sintaxis devuelve false y genera una advertencia, a menos que actives los errores internos. Comprueba siempre el valor de retorno.
  • Convierte antes de comparar. $book->price == 29.99 funciona por coincidencia; (float) $book->price === 29.99 es lo que realmente quieres.
  • Lectura de archivos remotos. $filename puede ser una URL, pero eso requiere que allow_url_fopen esté habilitado en php.ini.
  • Escritura de vuelta. SimpleXML es excelente para leer. Para serializar un elemento a una cadena XML, llama a asXML().

Conclusión

simplexml_load_file() es la forma más rápida de cargar un archivo XML en un árbol de objetos navegable en PHP. Combínala con comprobaciones estrictas === false, conversiones (string) al leer valores, y manejo de errores con libxml, y tendrás una base sólida para consumir feeds, configuraciones y APIs XML. Para entrada en cadena usa simplexml_load_string(), y para técnicas de recorrido completo continúa con SimpleXML en PHP.

Práctica

Práctica
What is the purpose of the SimpleXML_Load_File function in PHP?
What is the purpose of the SimpleXML_Load_File function in PHP?
Was this page helpful?