Trabajo con XML en PHP: desde el análisis simple hasta la creación de documentos complejos
XML (eXtensible Markup Language) sigue siendo uno de los formatos clave para el intercambio de datos, archivos de configuración y servicios web (SOAP, RSS/Atom). PHP proporciona varias extensiones integradas potentes para trabajar con XML que permiten resolver prácticamente cualquier tarea, desde el análisis de feeds RSS simples hasta la generación de documentos complejos con espacios de nombres. En este artículo, analizaremos las herramientas principales: SimpleXML, DOMDocument y XMLReader, y también aprenderemos a crear documentos XML sobre la marcha.
1. SimpleXML — análisis rápido y conveniente
SimpleXML es la extensión más simple para trabajar con XML. Convierte un documento XML en un objeto cuyas propiedades se pueden leer como arrays y objetos normales. Es ideal para documentos pequeños y medianos cuando no se requiere una navegación compleja.
Cargar XML desde una cadena o archivo
<?php// Desde una cadena$xmlString = '<book><title>PHP para principiantes</title><author>Ivan Petrov</author></book>';$book = simplexml_load_string($xmlString);
// Desde un archivo$books = simplexml_load_file('books.xml');
echo $book->title; // PHP para principiantesecho $book->author; // Ivan Petrov?>Trabajar con atributos y elementos múltiples
<?php$xml = '<library> <book id="1"> <title>PHP Objects</title> <author>Matt Zandstra</author> </book> <book id="2"> <title>Clean Code</title> <author>Robert C. Martin</author> </book></library>';
$library = simplexml_load_string($xml);
foreach ($library->book as $book) { echo 'ID: ' . $book['id'] . ' — ' . $book->title . ' (' . $book->author . ')<br>';}// ID: 1 — PHP Objects (Matt Zandstra)// ID: 2 — Clean Code (Robert C. Martin)?>Importante: SimpleXML no admite consultas XPath complejas con condiciones (solo rutas simples). Para consultas más potentes, use DOMDocument o XPath.
2. DOMDocument — control total sobre XML
DOMDocument implementa la API DOM de W3C y brinda control total sobre la estructura del documento. Puede agregar, eliminar, modificar cualquier nodo, trabajar con espacios de nombres y ejecutar consultas XPath de cualquier complejidad. Es la opción para tareas profesionales.
Análisis y navegación con DOMDocument
<?php$dom = new DOMDocument();$dom->load('books.xml');
// Obtener todos los elementos <book>$books = $dom->getElementsByTagName('book');
foreach ($books as $book) { $title = $book->getElementsByTagName('title')->item(0)->nodeValue; $author = $book->getElementsByTagName('author')->item(0)->nodeValue; echo "Libro: $title, Autor: $author<br>";}?>XPath — consultas potentes a XML
<?php$dom = new DOMDocument();$dom->load('library.xml');$xpath = new DOMXPath($dom);
// Encontrar todos los libros con precio > 500$expensiveBooks = $xpath->query('//book[price > 500]');
foreach ($expensiveBooks as $book) { echo $book->getElementsByTagName('title')->item(0)->nodeValue . ' — ' . $book->getElementsByTagName('price')->item(0)->nodeValue . ' rublos.<br>';}?>3. Creación de documentos XML
PHP no solo permite leer, sino también crear documentos XML. Veamos ambos enfoques.
Creación de XML con SimpleXML
<?php$xml = new SimpleXMLElement('<catalog></catalog>');
$product = $xml->addChild('product');$product->addChild('name', 'Portátil');$product->addChild('price', 75000);$product->addAttribute('id', '12