W3docs

addAttribute()

Aprende a usar SimpleXMLElement::addAttribute() en PHP para añadir atributos a elementos XML, incluyendo soporte de espacios de nombres.

Introducción

SimpleXML es una extensión de PHP que proporciona una API simple y fácil de usar para trabajar con documentos XML. La función SimpleXMLElement::addAttribute() es una de las muchas funciones que SimpleXML ofrece para trabajar con documentos XML. Es una herramienta potente que se puede usar para añadir atributos a un elemento en un documento XML. En este artículo, analizaremos en detalle la función SimpleXMLElement::addAttribute() y cómo puede utilizarse en PHP.

Sintaxis

addAttribute() es un método de un objeto SimpleXMLElement. Añade un atributo al elemento sobre el que se llama y no devuelve nada (void):

public SimpleXMLElement::addAttribute(
    string $name,
    string $value = "",
    ?string $namespace = null
): void
ParámetroRequeridoDescripción
$nameEl nombre del atributo a añadir (por ejemplo, id o xml:lang).
$valueNoEl valor del atributo. Por defecto, una cadena vacía.
$namespaceNoEl URI del espacio de nombres al que pertenece el atributo. Omítelo para un atributo simple sin espacio de nombres.

Como muta el elemento en su lugar, no necesitas asignar el resultado a nada: el nuevo atributo simplemente aparece en el elemento después de la llamada.

Ejemplo básico

El uso más común es añadir uno o más atributos a un elemento recién creado:

php— editable, runs on the server

Esto crea un elemento <book>, le añade un atributo isbn, luego agrega dos elementos hijo antes de serializar el documento a una cadena con asXML(). La salida es:

<?xml version="1.0"?>
<book isbn="123456789"><title>PHP Basics</title><author>John Doe</author></book>

¿Por qué usar addAttribute() en lugar de la sintaxis de array?

SimpleXML permite leer atributos con sintaxis de array — $element['isbn'] — e incluso escribirlos de esa forma. Entonces, ¿por qué existe addAttribute()?

  • Es la forma documentada de crear un atributo. La sintaxis de escritura con array funciona para cambiar un valor que ya existe, pero addAttribute() es explícita sobre la adición de uno nuevo.
  • Soporta espacios de nombres. La sintaxis de array no puede adjuntar un espacio de nombres al atributo que establece; el tercer parámetro de addAttribute() sí puede hacerlo.
<?php

$xml = new SimpleXMLElement('<book isbn="123456789"></book>');

// Update an existing attribute (array syntax is fine here):
$xml['isbn'] = '000000000';

// Add a brand-new attribute:
$xml->addAttribute('language', 'en');

echo $xml->asXML();

Añadir un atributo con espacio de nombres

Cuando un documento usa espacios de nombres XML, pasa el URI del espacio de nombres como tercer argumento. El nombre del atributo debe incluir el prefijo al que deseas vincularlo:

<?php

$xml = new SimpleXMLElement('<book></book>');
$xml->addAttribute('xml:lang', 'en', 'http://www.w3.org/XML/1998/namespace');

echo $xml->asXML();

Esto produce <book xml:lang="en"/>. Sin el argumento de espacio de nombres, el : en el nombre se trataría como parte literal del nombre del atributo en lugar de un prefijo de espacio de nombres.

Errores comunes

  • No sobreescribe. Llamar a addAttribute() con un nombre que ya existe añade un segundo atributo con ese nombre, produciendo XML no válido. Para cambiar un valor existente, usa la sintaxis de escritura con array ($xml['isbn'] = '...') en su lugar.
  • Los caracteres especiales se escapan automáticamente. Valores como Tom & Jerry se codifican automáticamente como Tom &amp; Jerry en la salida, por lo que no necesitas escaparlos tú mismo.
  • El orden importa con los espacios de nombres. Añade atributos con espacio de nombres después de que el elemento exista; no puedes asignar un espacio de nombres a un atributo en un elemento que no está dentro del ámbito de ese espacio de nombres sin declararlo.
<?php

$xml = new SimpleXMLElement('<book></book>');
$xml->addAttribute('isbn', '123 & 456');

echo $xml->asXML(); // <book isbn="123 &amp; 456"/>

Funciones relacionadas

  • addChild() — añade un elemento hijo en lugar de un atributo.
  • asXML() — serializa el SimpleXMLElement de vuelta a una cadena XML.
  • attributes() — lee los atributos que ya tiene un elemento.

Conclusión

SimpleXMLElement::addAttribute() es la forma explícita y compatible con espacios de nombres de añadir atributos al construir XML con SimpleXML. Úsala cuando crees atributos (especialmente los que tienen espacio de nombres), y emplea la sintaxis de escritura con array cuando solo necesites actualizar un valor ya existente. Ten en cuenta que nunca sobreescribe y que escapa los caracteres especiales automáticamente.

Práctica

Práctica
¿Qué hace la función addAttribute en PHP?
¿Qué hace la función addAttribute en PHP?
Was this page helpful?