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.
<?xml version="1.0" encoding="UTF-8"?> <user> <firstName>Simone</firstName> <lastName>DAmico</lastName> <birthDate>2000-01-01</birthDate> <country>IT</country> </user>
Un esempio di XML valido è il seguente:
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:
object(SimpleXMLElement)#1 (4) { ["firstName"]=> string(6) "Simone" ["lastName"]=> string(6) "DAmico" ["birthDate"]=> string(6) "2000-01-01" ["country"]=> string(6) "IT" }
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
$user = (array)new SimpleXMLElement($xml); var_dump($user);
Convertire un array in una stringa XML
echo $user['firstName'];
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:
Il risultato che otterremo è il seguente:
$user = [ 'firstName' => 'Simone', 'lastName' => 'D\'Amico', 'age' => 30 ]; $xml = new SimpleXMLElement('<user />'); foreach ($user as $key => $value) { $xml->addChild($key, $value); } echo $xml->asXML();
Analizzando il codice abbiamo creato un nuovo oggetto SimpleXMLElement e, ciclando su tutte le proprietà dell’array, le abbiamo aggiunte al nodo . A questo punto attraverso il metodo asXML() abbiamo restituito la stringa contenente l’XML.
<?xml version="1.0"?> <user><firstName>Simone</firstName><lastName>D'Amico</lastName><age>30</age></user>