L'XML (eXtensible Markup Language) è un metalinguaggio per la definizione di linguaggi di markup. Come JSON, l'XML è utilizzato anche per generare documenti che possono essere letti da applicazioni.
Un esempio di XML valido è il seguente:
<?xml version="1.0" encoding="UTF-8"?>
<user>
<firstName>Simone</firstName>
<lastName>DAmico</lastName>
<birthDate>2000-01-01</birthDate>
<country>IT</country>
</user>
Nel caso si volesse approfondire come funziona il linguaggio XML, prima di procedere è possibile fare riferimento alla Guida XML di base.
Accedere ad un documento XML con PHP
PHP mette a disposizione degli strumenti che ci consentono di leggere e creare file XML.
In questo esempio utilizzeremo un concetto non incluso nella guida PHP: le classi e gli oggetti. Per approfondire questo argomento è possibile consultare la guida alla programmazione a oggetti con PHP
Data una stringa che rappresenta un documento XML, vediamo come accedere alle singole proprietà:
$xml = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<user>
<firstName>Simone</firstName>
<lastName>DAmico</lastName>
<birthDate>2000-01-01</birthDate>
<country>IT</country>
</user>
XML;
$user = new SimpleXMLElement($xml);
var_dump($user);
La classe SimpleXMLElement
ci consente di convertire una stringa XML in un oggetto che possiamo manipolare agevolmente. Eseguendo il codice appena visto, infatti, otteniamo come risultato:
object(SimpleXMLElement)#1 (4) {
["firstName"]=>
string(6) "Simone"
["lastName"]=>
string(6) "DAmico"
["birthDate"]=>
string(6) "2000-01-01"
["country"]=>
string(6) "IT"
}
Ovviamente possiamo accedere anche ai singoli valori contenuti nelle proprietà dell'utente. Dato che in questa guida ancora non è stato introdotto il concetto di classe, per adesso possiamo trasformare l'oggetto in un semplice array ed eseguire le operazioni direttamente sull'array ottenuto:
$user = (array)new SimpleXMLElement($xml);
var_dump($user);
Eseguendo questo codice noteremo che verrà stampato un array e non più un oggetto, questo perché abbiamo effettuato il casting ad array con la keyword (array)
. A questo punto possiamo quindi accedere al nome dell'utente con:
echo $user['firstName'];
Convertire un array in una stringa XML
Abbiamo visto che possiamo leggere una stringa XML e convertirla in un array PHP in maniera molto semplice. Vediamo invece come effettuare il contrario partendo da un array:
$user = [
'firstName' => 'Simone',
'lastName' => 'D\'Amico',
'age' => 30
];
$xml = new SimpleXMLElement('<user />');
foreach ($user as $key => $value) {
$xml->addChild($key, $value);
}
echo $xml->asXML();
Il risultato che otterremo è il seguente:
<?xml version="1.0"?>
<user><firstName>Simone</firstName><lastName>D'Amico</lastName><age>30</age></user>
Analizzando il codice abbiamo creato un nuovo oggetto SimpleXMLElement
e, ciclando su tutte le proprietà dell'array, le abbiamo aggiunte al nodo <user>
. A questo punto attraverso il metodo asXML()
abbiamo restituito la stringa contenente l'XML.