Trabajo con XML en PHP: DOMDocument, SimpleXML y XPath
XML (eXtensible Markup Language) sigue siendo uno de los formatos clave para el intercambio de datos, almacenamiento de configuraciones e integración con servicios externos (feeds RSS, SOAP, API). PHP proporciona varias extensiones integradas potentes para trabajar con XML. En este artículo analizaremos tres enfoques principales: DOMDocument (modelo de objeto de documento), SimpleXML (simple e intuitivo) y XPath (lenguaje de consultas para navegación).
1. Preparación: ejemplo de documento XML
Para todos los ejemplos usaremos el mismo archivo XML catalog.xml:
<?xml version="1.0" encoding="UTF-8"?><catalog> <book id="1"> <title>PHP para principiantes</title> <author>Ivan Petrov</author> <price currency="RUB">1200</price> </book> <book id="2"> <title>XML en detalle</title> <author>Maria Sidorova</author> <price currency="RUB">950</price> </book></catalog>2. DOMDocument — control total sobre XML
La extensión DOMDocument implementa W3C DOM Level 2. Proporciona el máximo control: se pueden crear, eliminar, modificar cualquier nodo, atributo y contenido de texto. Es adecuado para escenarios complejos donde se requiere un control preciso de la estructura.
Carga y lectura de XML
<?php$dom = new DOMDocument();$dom->load('catalog.xml'); // o loadXML($xmlString)
$books = $dom->getElementsByTagName('book');foreach ($books as $book) { $id = $book->getAttribute('id'); $title = $book->getElementsByTagName('title')->item(0)->nodeValue; $author = $book->getElementsByTagName('author')->item(0)->nodeValue; $price = $book->getElementsByTagName('price')->item(0)->nodeValue; echo "Libro #$id: $title — $author, $price RUB.";}?>Creación de nuevo XML
<?php$dom = new DOMDocument('1.0', 'UTF-8');$root = $dom->createElement('catalog');$dom->appendChild($root);
$book = $dom->createElement('book');$book->setAttribute('id', '3');$title = $dom->createElement('title', 'PHP y XML');$book->appendChild($title);$root->appendChild($book);
echo $dom->saveXML(); // mostrará la cadena XML// $dom->save('new_catalog.xml');?>3. SimpleXML — simplicidad y comodidad
SimpleXML es una extensión más ligera que convierte XML en un objeto con acceso a los elementos a través de propiedades. Ideal para lectura rápida, especialmente cuando la estructura XML es conocida y no requiere ajustes finos.
Lectura de XML con SimpleXML
<?php$xml = simplexml_load_file('catalog.xml'); // o simplexml_load_string($xmlString)
foreach ($xml->book as $book) { $id = (string)$book['id']; $title = (string)$book->title; $author = (string)$book->author; $price = (string)$book->price; echo "Libro #$id: $title — $author, $price RUB.";}?>Creación de XML con SimpleXML
<?php$xml = new SimpleXMLElement('<catalog></catalog>');$book = $xml->addChild('book');$book->addAttribute('id', '4');$book->addChild('title', 'SimpleXML Guide');$book->addChild('price', 800)->addAttribute('currency', 'RUB');
echo $xml->asXML();// $xml->asXML('output.xml');?>Modificación de datos
<?php$xml = simplexml_load_file('catalog.xml');$xml->book[0]->price = 1300; // cambiamos el precio del primer libro$xml->asXML('catalog_updated.xml');?>4. XPath — búsqueda flexible en el documento
También en la biblioteca
TypeScript conditional-type-checks: guía completa con ejemplos
Trabajo con imágenes en Rust: revisión de las bibliotecas image, fast_image_resize y otras
Biblioteca estándar de C++: revisión completa y ejemplos de código
Pruebas en C++: revisión de frameworks y herramientas (Google Test, Catch2, doctest)
Trabajo con Apache Kafka en Swift (iOS/macOS): bibliotecas y ejemplos