DOM en PHP - Document Object Model

Manipula documentos XML y HTML como un profesional

XML/HTML
Estructura Jerárquica
Lectura/Escritura

🌳 ¿Qué es el DOM en PHP?

DOM (Document Object Model) es una extensión de PHP que permite manipular documentos XML y HTML como una estructura de árbol. Puedes navegar, modificar, agregar o eliminar elementos de manera programática.

Documento XML
<inventario>
<pieza id="10">
<nombre> Jarrón minimalista </nombre>
<precio> 55.055 </precio>

📂 Lectura de XML con DOM

Ejemplo práctico usando el archivo ceramica.xml:

ceramica.xml

<?xml version="1.0" encoding="UTF-8"?>
<inventario>
    <pieza id="10">
        <nombre>Jarron minimalista</nombre>
        <precio>55.055</precio>
    </pieza>
</inventario>

Código PHP (lectura)

<?php
$dom = new DOMDocument();
$dom->load("ceramica.xml");

$piezas = $dom->getElementsByTagName("pieza");

foreach ($piezas as $pieza) {
    $nombre = $pieza->getElementsByTagName("nombre")->item(0)->nodeValue;
    $precio = $pieza->getElementsByTagName("precio")->item(0)->nodeValue;
    
    echo "Producto: $nombre \nPrecio: $precio €\n";
}
?>

📊 Resultado de la ejecución:

🔧 Métodos Principales del DOM

Creación

  • new DOMDocument()
  • createElement()
  • createAttribute()
  • createTextNode()

Búsqueda

  • getElementsByTagName()
  • getElementById()
  • getAttribute()
  • item()

Modificación

  • nodeValue = "nuevo"
  • setAttribute()
  • appendChild()
  • removeChild()

Guardado

  • save()
  • saveXML()
  • saveHTML()

💰 Ejemplo Interactivo: Actualizar Precios

El siguiente ejemplo incrementa el precio del producto en un 10%:

Antes de la actualización:

<?xml version="1.0"?>

Después (+10%):

<?xml version="1.0"?>

Código utilizado:

<?php
$dom = new DOMDocument();
$dom->load("ceramica.xml");
$piezas = $dom->getElementsByTagName("pieza");

foreach ($piezas as $pieza) {
    // Obtener el precio actual
    $precioNode = $pieza->getElementsByTagName("precio")->item(0);
    $precioActual = $precioNode->nodeValue;
    
    // Calcular nuevo precio (+10%)
    $nuevoPrecio = $precioActual * 1.10;
    
    // Actualizar el valor
    $precioNode->nodeValue = $nuevoPrecio;
}

// Guardar los cambios
$dom->save("ceramica.xml");
echo "Archivo actualizado guardado correctamente.";
?>

🏗️ Estructura del DOM

Tipos de Nodos:

  • Documento - XML_DOCUMENT_NODE
  • Elemento - XML_ELEMENT_NODE
  • Atributo - XML_ATTRIBUTE_NODE
  • Texto - XML_TEXT_NODE
  • Comentario - XML_COMMENT_NODE

Propiedades importantes:

  • nodeName - Nombre del nodo
  • nodeValue - Valor del nodo
  • nodeType - Tipo de nodo (constante)
  • parentNode - Nodo padre
  • childNodes - Nodos hijos
  • attributes - Atributos del nodo

➕ Crear Nuevo XML desde Cero

<?xml version="1.0" encoding="UTF-8"?>
<biblioteca>
    <libro id="1">
        <titulo>El Quijote</titulo>
        <autor>Miguel de Cervantes</autor>
        <precio>29.99</precio>
    </libro>
</biblioteca>

Código para crear el XML:

<?php
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->formatOutput = true;

// Crear elemento raíz
$biblioteca = $dom->createElement('biblioteca');
$dom->appendChild($biblioteca);

// Crear elemento libro
$libro = $dom->createElement('libro');
$biblioteca->appendChild($libro);

// Agregar atributo id
$id = $dom->createAttribute('id');
$id->value = '1';
$libro->appendChild($id);

// Agregar elementos hijos
$titulo = $dom->createElement('titulo', 'El Quijote');
$libro->appendChild($titulo);

$autor = $dom->createElement('autor', 'Miguel de Cervantes');
$libro->appendChild($autor);

$precio = $dom->createElement('precio', '29.99');
$libro->appendChild($precio);

echo $dom->saveXML();
?>

⚖️ DOM vs Otros Métodos

Método Ventajas Desventajas Uso recomendado
DOM ✅ Completo, lectura/escritura, navegación fácil ❌ Consume mucha memoria con archivos grandes Archivos XML/HTML pequeños/medianos
SimpleXML ✅ Simple, fácil de usar ❌ Limitado para modificaciones complejas Lectura rápida de XML
XMLReader/XMLWriter ✅ Bajo consumo de memoria ❌ Más complejo de programar Archivos XML muy grandes

✏️ Área de Práctica DOM

XML de ejemplo:

Código PHP DOM:

Resultado:

Ejecuta el código para ver el resultado...

💡 Consejos para trabajar con DOM

Formato de salida

Usa $dom->formatOutput = true para obtener XML legible

Preservar espacios

$dom->preserveWhiteSpace = false para limpiar el XML

Validación

Usa $dom->validate() para validar contra DTD

XPath

Combina DOM con XPath para búsquedas más potentes

Manejo de errores

Usa libxml_use_internal_errors(true) para errores personalizados

Memoria

Para archivos muy grandes (>10MB), considera XMLReader