PHP Aggiungere un nodo ad un file XML con SimpleXML

ott 21st, 2009 | Filed under PHP, Snippet

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

< ?xml version="1.0"?>
<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

<?php
//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ì.

< ?xml version="1.0"?>
<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

Condividi l'articolo

Post correlati:

Tags: ,
  1. alan
    feb 5th, 2010 at 12:57

    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???

  2. codesnippet
    feb 6th, 2010 at 19:00

    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.

  3. giuseppe
    dic 29th, 2010 at 14:40

    CIAO

  4. Ricky
    mag 28th, 2011 at 17:17

    Grazie per la dritta :D è stata molto utile…ma per eliminare un nodo dal file xml come si può fare?

  5. CodeSnippet
    mag 29th, 2011 at 09:22

    Puoi usare la funzione unset. http://www.webmasterworld.com/php/3882927.htm questo è un esempio