W3docs

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
ParametroObbligatorioDescrizione
$nameIl nome dell'attributo da aggiungere (ad esempio id o xml:lang).
$valueNoIl valore dell'attributo. Il valore predefinito è una string vuota.
$namespaceNoL'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:

php— editable, runs on the server

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 & Jerry vengono automaticamente codificati in Tom &amp; Jerry nell'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 &amp; 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.

Esercitazione

Pratica
Cosa fa la funzione addAttribute in PHP?
Cosa fa la funzione addAttribute in PHP?
Was this page helpful?