2011-01-20 11 views
13

Ho un test.xml file XMLAggiornamento con PHP

<?xml version="1.0"?> 
<info> 
    <user> 
    <name> 
     <firstname>FirstName</firstname> 
     <lastname>Last Name</lastname> 
     <nameCoordinate> 
     <xName>125</xName> 
     <yName>20</yName> 
     </nameCoordinate> 
    </name> 
    </user> 
</info> 

sto cercando di aggiornare il nodo di Xname & yName usando PHP su un invio di un modulo. Quindi, ho caricato il file usando simplexml_load_file(). Il codice di azione del modulo PHP è inferiore a

<?php 
    $xPostName = $_POST['xName']; 
    $yPostName = $_POST['yName']; 

    //load xml file to edit 
     $xml = simplexml_load_file('test.xml'); 

    $xml->info->user->name->nameCoordinate->xName = $xPostName; 
    $xml->info->user->name->nameCoordinate->yName = $yPostName; 
    echo "done"; 
?> 

Desidero aggiornare i valori del nodo ma il codice precedente sembra essere errato. Qualcuno può aiutarmi a correggerlo ??

UPDATE: La mia domanda è in qualche modo simile a questo Updating a XML file using PHP ma qui, sto caricando l'XML da un file esterno e sto aggiornando anche un elemento, non un attributo. Ecco dov'è la mia confusione.

+0

ciò che non funziona come previsto? non hai un errore spiegato. –

+0

Voglio aggiornare i valori del nodo. Non sta succedendo. – ptamzz

+0

Ho aggiornato la mia domanda sopra. – ptamzz

risposta

28

Non stai accedendo al nodo giusto. Nell'esempio, $xml contiene il nodo radice <info/>. Ecco un ottimo consiglio: assegna sempre la variabile che contiene il tuo documento XML dopo il nodo radice, eviterà tale confusione.

Inoltre, come ha sottolineato Ward Muylaert, è necessario salvare il file.

Ecco l'esempio corretto:

// load the document 
// the root node is <info/> so we load it into $info 
$info = simplexml_load_file('test.xml'); 

// update 
$info->user->name->nameCoordinate->xName = $xPostName; 
$info->user->name->nameCoordinate->yName = $yPostName; 

// save the updated document 
$info->asXML('test.xml'); 
+0

Grazie Josh :). Funziona ora – ptamzz

+0

Cosa succederà se il nodo xName o yName non esiste già? – swl1020

+0

Cosa succede se hai diversi utenti con più yName e vuoi modificarli tutti in una volta? qualche idea? – user906379

3

È necessario scrivere nuovamente le modifiche al file, utilizzare il metodo asXML di SimpleXMLElement.

+0

Credo che riscriva l'intero tag. Voglio aggiornare solo nodi specifici. – ptamzz

+1

Lo fa, ma a meno di scrivere metà della logica di interpretazione XML nel proprio codice per scrivere solo nodi specifici, credo che sia il massimo che si ottiene con SimpleXML. –

Problemi correlati