Trabajo con XML en PHP: DOMDocument, SimpleXML y XPath

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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

Recommendations