Ejemplo 2: Atributos XML
Cómo añadir metadatos a un elemento sin crear más elementos hijos
🎯 ¿En qué consiste este ejemplo?
Un mismo dato se puede modelar como elemento hijo o como atributo.
Este ejemplo te deja construir un <producto> y ver, en directo, la diferencia:
el id, la categoria y la moneda se guardan como atributos
(van dentro de la propia etiqueta de apertura), mientras que el precio se guarda
como elemento hijo, para que compares ambas formas en el mismo documento.
Configura el producto
XML generado
<producto ...>. Precio, en cambio, es un elemento completo aparte.
<?xml version="1.0"?> <producto id="045" categoria="ropa-deportiva" moneda="EUR">Camiseta técnica<precio>19.95</precio></producto>
📖 Explicación del Código
Código PHP Completo
<?php
$xml = new SimpleXMLElement('<producto/>');
$xml->addAttribute('id', $id);
$xml->addAttribute('categoria', $categoria);
$xml->addAttribute('moneda', $moneda);
$xml[0] = $nombre; // texto del nodo <producto>
$xml->addChild('precio', $precio); // elemento hijo
echo $xml->asXML();
?>
📝 addAttribute()
¿Qué hace? Añade un par nombre="valor" dentro de la etiqueta de apertura del elemento, sin crear un nuevo elemento anidado.
💡 Concepto: atributo vs. elemento
Un atributo describe o identifica al elemento (metadato), mientras que un elemento hijo suele representar un dato propio con entidad suficiente para tener su propio contenido y, potencialmente, sus propios sub-elementos.
📝 Texto del propio nodo
¿Qué hace? Asigna el contenido de texto del elemento <producto> (lo que va entre la etiqueta de apertura y la de cierre), en lugar de crear un hijo nuevo.
📝 Cuándo usar cada uno
Usa atributos para identificadores, banderas o metadatos cortos (id, lang, moneda).
Usa elementos hijos cuando el dato puede tener estructura propia, estar vacío de forma significativa, o necesitar múltiples valores (varias <etiqueta>, por ejemplo).
🎯 Conceptos Clave Aprendidos
Sintaxis de atributos
- Van dentro de la etiqueta de apertura
- Siempre entre comillas:
id="045" - Un elemento puede tener varios atributos
Atributo vs. elemento
- Atributo: metadato simple y único
- Elemento: dato con posible estructura
- No hay una regla absoluta, es diseño
SimpleXML
addAttribute()añade atributos$nodo[0] = valorfija el texto del nodoaddChild()sigue sirviendo para hijos
💪 Ejercicio Práctico
Rediseña el modelo de datos
- Cambia
categoriade atributo a elemento hijo. ¿Qué línea de código cambiarías? - Añade un nuevo atributo
stockcon la cantidad disponible - Piensa un caso donde el mismo dato (por ejemplo, "fecha") tendría sentido como atributo y otro donde tendría más sentido como elemento
Categoría como elemento hijo
// Antes: $xml->addAttribute('categoria', $categoria);
// Después:
$xml->addChild('categoria', $categoria);
El resultado sería <categoria>ropa-deportiva</categoria> como hijo de <producto>, en vez de un atributo dentro de la etiqueta.
Nuevo atributo stock
$xml->addAttribute('stock', '12');