addAttribute()
Scopri come usare SimpleXMLElement::addAttribute() in PHP per aggiungere attributi agli elementi XML, con esempi e namespace.
Introduzione
SimpleXML è un'estensione PHP che fornisce un'API semplice e facile da usare per lavorare con documenti XML. La funzione SimpleXMLElement::addAttribute() è una delle tante funzioni che SimpleXML mette a disposizione per lavorare con i documenti XML. È uno strumento potente che può essere utilizzato per aggiungere attributi a un elemento in un documento XML. In questo articolo discuteremo in dettaglio la funzione SimpleXMLElement::addAttribute() e come può essere utilizzata in PHP.
Sintassi
addAttribute() è un metodo di un oggetto SimpleXMLElement. Aggiunge un attributo all'elemento su cui viene chiamato e non restituisce nulla (void):
public SimpleXMLElement::addAttribute(
string $name,
string $value = "",
?string $namespace = null
): void| Parametro | Obbligatorio | Descrizione |
|---|---|---|
$name | Sì | Il nome dell'attributo da aggiungere (ad esempio id o xml:lang). |
$value | No | Il valore dell'attributo. Il valore predefinito è una string vuota. |
$namespace | No | L'URI del namespace a cui appartiene l'attributo. Omettere per un attributo semplice senza namespace. |
Poiché modifica l'elemento direttamente, non si assegna il risultato a nulla — il nuovo attributo compare semplicemente sull'elemento dopo la chiamata.
Esempio di base
L'uso più comune è aggiungere uno o più attributi a un elemento appena creato:
Questo crea un elemento <book>, aggiunge un attributo isbn, quindi aggiunge due elementi figlio prima di serializzare il documento in una string con asXML(). L'output è:
<?xml version="1.0"?>
<book isbn="123456789"><title>PHP Basics</title><author>John Doe</author></book>Perché usare addAttribute() invece della sintassi array?
SimpleXML permette di leggere gli attributi con la sintassi array — $element['isbn'] — ed è possibile anche scriverli in quel modo. Allora perché esiste addAttribute()?
- È il modo documentato per creare un attributo. La sintassi di scrittura array funziona per modificare un valore già esistente, ma
addAttribute()è esplicita nel voler aggiungere un nuovo attributo. - Supporta i namespace. La sintassi array non può associare un namespace all'attributo che imposta; il terzo parametro di
addAttribute()invece lo consente.
<?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();Aggiungere un attributo con namespace
Quando un documento utilizza namespace XML, passare l'URI del namespace come terzo argomento. Il nome dell'attributo deve includere il prefisso a cui si desidera associarlo:
<?php
$xml = new SimpleXMLElement('<book></book>');
$xml->addAttribute('xml:lang', 'en', 'http://www.w3.org/XML/1998/namespace');
echo $xml->asXML();Questo produce <book xml:lang="en"/>. Senza l'argomento namespace, i : nel nome verrebbero trattati come parte letterale del nome dell'attributo anziché come prefisso di namespace.
Errori comuni
- Non sovrascrive. Chiamare
addAttribute()con un nome già esistente aggiunge un secondo attributo con quel nome, producendo XML non valido. Per modificare un valore esistente, usare la sintassi di scrittura array ($xml['isbn'] = '...'). - I caratteri speciali vengono escaped automaticamente. Valori come
Tom & Jerryvengono automaticamente codificati inTom & Jerrynell'output, quindi non è necessario effettuare l'escape manualmente. - L'ordine è importante con i namespace. Aggiungere gli attributi con namespace dopo che l'elemento esiste; non è possibile applicare un namespace a un attributo su un elemento che non è nell'ambito di quel namespace senza dichiararlo.
<?php
$xml = new SimpleXMLElement('<book></book>');
$xml->addAttribute('isbn', '123 & 456');
echo $xml->asXML(); // <book isbn="123 & 456"/>Funzioni correlate
addChild()— aggiunge un elemento figlio anziché un attributo.asXML()— serializza il SimpleXMLElement in una string XML.attributes()— legge gli attributi già presenti su un elemento.
Conclusione
SimpleXMLElement::addAttribute() è il modo esplicito e compatibile con i namespace per aggiungere attributi durante la costruzione di XML con SimpleXML. Utilizzarla quando si creano attributi (specialmente quelli con namespace), e usare la sintassi di scrittura array quando si ha solo bisogno di aggiornare un valore già esistente. Tenere presente che non sovrascrive mai i valori esistenti e che esegue automaticamente l'escape dei caratteri speciali.