PHP Aggiungere un nodo ad un file XML con SimpleXML
Link sponsorizzati
Oggi ho trovato un commento ad un vecchio post che chiedeva informazioni su un argomento che pensavo di aver già trattato, invece cercando ho visto che non l’ho fatto.
Ho già parlato in passato della lettura di file XML e della modifica ma ancora non ho parlato dell’inserimento. Riprendendo il discorso, assumiamo di avere un file XML del genere.
Link sponsorizzati
<parent>
<utente>
<nick>pippo</nick>
<pass>pluto</pass>
<permessi>Utente</permessi>
</utente>
</parent>
e di voler inserire all’intero di questo file un nuovo nodo utente, con le informazioni che vogliamo. Il codice PHP per realizzare ciò è il seguente
//file.xml è il file che contiene il codice xml che ho stampato sopra
$xml = simplexml_load_file("file.xml");
$nuovoUtente = $xml->addChild('utente'); //crea un elemento <utente> </utente>
$nick = $nuovoUtente->addChild('nick', 'Nick nuovo utente'); //inserisce dentro utente <nick>Nick nuovo utente</nick>
$pass = $nuovoUtente->addChild('pass', 'Pass nuovo utente'); //come sopra, però con gli attributi cambiati
$permessi = $nuovoUtente->addChild('permessi', 'Permessi del nuovo utente'); //come sopra
echo "<pre>".htmlentities($xml->asXML())."</pre>"; //stampa il nuovo file creato
//sovrascrive il vecchio file con i nuovi dati
$f = fopen("file.xml", "w");
fwrite($f, $xml->asXML());
fclose($f);
?>
Ovviamente, dopo l’esecuzione dello script, il file XML risulterà cambiato come ci aspettavamo, ovvero così.
<parent>
<utente>
<nick>pippo</nick>
<pass>pluto</pass>
<permessi>Utente</permessi>
</utente>
<utente>
<nick>Nick nuovo utente</nick>
<pass>Pass nuovo utente</pass>
<permessi>Permessi del nuovo utente</permessi>
</utente>
</parent>
Il tutto è ben commentato, quindi non ci dovrebbero essere problemi. Mi preme ricordare che per inserire degli attributi al tag, bisogna usare la funzione addAttribute. Per qualsiasi altra cosa vi rimando alla documentazione.
Link sponsorizzati


mooolto interessante…ma se volessi aggiungere un nodo in testa???? come si fa??
e se non si può aggiungere se non in coda, allora c’è un modo di leggere i nodi xml dal fondo???
Si. Qui spiego come leggere i file XML. Per leggerli al contrario basta che metti gli elementi in un tuo array mano mano che li leggi e poi lo “rigiri” con array_reverse. Questa è la cosa più semplice che mi viene in mente al momento.
CIAO
Grazie per la dritta
è stata molto utile…ma per eliminare un nodo dal file xml come si può fare?
Puoi usare la funzione unset. http://www.webmasterworld.com/php/3882927.htm questo è un esempio