PHP Modificare file XML con SimpleXML

ago 28th, 2009 | Filed under PHP, Snippet

Link sponsorizzati

L’altra volta ho parlato di come leggere un file XML tramite SimpleXML, bene, oggi, parlerò invece di come modificare un file XML, sempre con SimpleXML.
Partiamo dall’esempio dell’altra volta, stesso file, però un pò modificato!

<parent>
    <utente>
        <nick>pippo</nick>
        <pass>pluto</pass>
        <permessi>Utente</permessi>
    </utente>

    <utente>
        <nick>pippo 2</nick>
        <pass>pluto 2</pass>
        <permessi>Moderatore</permessi>
    </utente>
</parent>

Facciamo finta di voler promuovere a moderatore anche pippo. Questo snippet mostra come fare

Link sponsorizzati

<?php
//file.xml è il file che contiene il codice xml che ho stampato sopra
$xml = simplexml_load_file("file.xml");
//stampa nick e password separati da un -

foreach($xml->utente as $item)
    if($item->nick == "pippo") //se l'utente è pippo
        $item->permessi = "Moderatore"; //lo promuovo!

echo "<pre>".htmlentities($xml->asXML())."</pre>";
?>

Ora, se analizziamo l’output di questo script ci verrà fuori:

<parent>
    <utente>
        <nick>pippo</nick>
        <pass>pluto</pass>
        <permessi>Moderatore</permessi>
    </utente>

    <utente>
        <nick>pippo 2</nick>
        <pass>pluto 2</pass>
        <permessi>Moderatore</permessi>
    </utente>
</parent>

Che è quello che ci aspettiamo, cioè, entrambi gli utenti moderatori. Però, ora, se andiamo a leggere il codice sorgente del file file.xml, esso sarà quello di prima, invariato, con pippo che ha permessi di semplice utente. Ora, per modificare anche il file, bisogna sovrascriverlo, per fare ciò basta questo alla fine dello script.

$f = fopen("file.xml", "w");
fwrite($f,  $xml->asXML());
fclose($f);

Ricapitolando quindi, il codice completo per modificare il file xml sarà questo

<?php
//file.xml è il file che contiene il codice xml che ho stampato sopra
$xml = simplexml_load_file("file.xml");
//stampa nick e password separati da un -

foreach($xml->utente as $item)
    if($item->nick == "pippo") //se l'utente è pippo
        $item->permessi = "Moderatore"; //lo promuovo!

//sovrascrivo il file
$f = fopen("file.xml", "w");
fwrite($f,  $xml->asXML());
fclose($f);
?>

Link sponsorizzati

Se ti è piaciuto l'articolo condividilo!

Post correlati:

Tags: ,
  1. Andrea
    ott 21st, 2009 at 15:10

    ciao, ti volevo chiedere, invece di modificare, come si può fare per aggiungere un nodo al file xml?
    grazie

  2. codesnippet
    ott 21st, 2009 at 19:10

    Ciao, pensavo di aver già trattato l’argomento, invece cercando non c’è. Comunque ho appena fatto un post su questo!

    Leggi qui http://codesnippet.biz/php-aggiungere-un-nodo-ad-un-file-xml-con-simplexml/

  3. Mirko
    mag 23rd, 2010 at 10:00

    Grazie era proprio quello di cui avevo bisogno ;)

    Mirko