Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003

    SimpleXML: cancellare nodo

    Supponiamo di avere un file xml così formattato:
    codice:
    <?xml version="1.0" encoding="iso-8859-1"?>
    <service>
    	<messages>
    		<message id="1"><data>27/09/2006 16.39.47</data><sender>Fabrizio</sender><testo>test</testo><read>1</read></message>
    		<message id="2"><data>27/09/2006 16.40.42</data><sender>Fabrizio</sender><testo>altro test</testo><read>1</read></message>
    		<message id="3"><data>27/09/2006 16.52.38</data><sender>Fabrizio</sender><testo>terzo test</testo><read>1</read></message>
    	</messages>
    	<lastid>3</lastid>
    </service>
    Il file viene creato da un'applicazione delphi e viene modificato tramite php.
    Ora, supponiamo che a me serva cancellare il nodo <message> con id="3", ho creato un ciclo così fatto:
    Codice PHP:
    if (file_exists('./ips/'.$ip.'.xml')) {
        
    $xml simplexml_load_file('./ips/'.$ip.'.xml');
        
    $messages $xml->messages;
        
    //foreach($messages->message as $msg) {
        
    foreach($messages->message as $key=>&$msg) {
            if (
    $msg['id'] == $id) {
                
    //unset($msg);
                //$msg = null;
                
    unset($msg);
                break;
            }
        }
        
    $fp fopen('./ips/'.$ip.'.xml','w');
        
    fwrite($fp,$xml->asXML());
        
    fclose($fp);

    Ma ovviamente non funziona nessuno dei comandi adottati (gli altri sono quelli commentati, ovviamente).
    Qualcuno ha qualche soluzione alternativa?

  2. #2
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    Ho trovato la soluzione.
    La posto nell'eventualità che possa servire a qualcun altro.
    Piccola premessa: la soluzione che ho trovato (relativamente semplice) si basa su dom e non su simplexml.
    Codice PHP:
    if (file_exists('./ips/'.$ip.'.xml')) {
        
    $doc = new DOMDocument();
        
    $doc->load('./ips/'.$ip.'.xml');
        
    $padre $doc->documentElement;
        
    $xp = new DOMXPath($doc);
        
    $query $xp->query("//message[@id='".$id."']",$padre);
        
    $node $query->item(0);
        
    $old $node->parentNode->removeChild($node);
        
    $doc->save('./ips/'.$ip.'.xml');


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.