Aggiungere un nuovo nodo/elemento in testa al file xml già esistente

di il
1 risposte

Aggiungere un nuovo nodo/elemento in testa al file xml già esistente

Sto provando da tempo a cercare di inserire un nuovo nodo all'inizio di un file xml già creato. Questo è il formato:

<?xml version="1.0"?>
<doorlog>
<event>
<type>door</type>
<description>Descrizione 1 SERRATURA CAMERA A</description>
<code>ciao3</code>
<date>06/28/2022 14:57:52 pm</date>
<ip>172.16.137.69</ip>
<agent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53
Safari/537.36 Edg/103.0.1264.37</agent>
</event>

</doorlog>


Quello che fa il mio programma è che quando vado a premere un pulsante esso manda delle informazioni predefinite e le salva in formato xml come quello appena inserito, e al prossimo premere del pulsante mi rinvia queste informazioni e le accoda una sotto l'altra, ma io vorrei fare in modo che invece di inserirlo sotto mi vada al primo posto, avete idea di come si possa fare?

Una soluzione che ho trovato è quella di riscrivere un nuovo file e subito il nuovo nodo arrivato e poi accodargli il file vecchio con tutti gli altri nodi, ma secondo me esso risulta troppo elaborato e pesante da fare quando il file si riempie troppo...
Vi allego il codice:

//Determino alcuni dati della sessione
date_default_timezone_set('Europe/Rome');
$date = date('m/d/Y H:i:s a', time());
$IP = get_client_ip_server();
$u_agent = $_SERVER['HTTP_USER_AGENT'];

//qua faccio diversi controlli che però non metto perchè non servono a farvi capire ed è un po' complicato.

$xmlog = new SimpleXMLElement('<doorlog></doorlog>');

$event = $xmlog->addChild('event');
$event->addChild('type', 'door') ;
$event->addChild('description', $door->description);
$event->addChild('code', $codice) ;
$event->addChild('date', $date) ;
$event->addChild('ip', $IP) ;
$event->addChild('agent', $u_agent) ;



//al nuovo file creato con il nuovo evento all'inizio, gli accodo tutto il file xml vecchio
foreach($xmlogOld->event as $evento) {
//$xmlog->addChild($evento);
$event = $xmlog->addChild('event');
$event->addChild('type', $evento->type) ;
$event->addChild('description', $evento->description);
$event->addChild('code', $evento->code) ;
$event->addChild('date', $evento->date) ;
$event->addChild('ip', $evento->ip) ;
$event->addChild('agent', $evento->agent) ;
}

1 Risposte

  • Re: Aggiungere un nuovo nodo/elemento in testa al file xml già esistente

    Mi sono dimenticato, se può aiutare l'indentazione del file xml sarebbe questa:

    <?xml version="1.0"?>
    <doorlog>
    "tab"<event>
    "tab""tab"<type>door</type>
    "tab""tab"<description>Descrizione 1 SERRATURA CAMERA A</description>
    "tab""tab"<code>ciao3</code>
    "tab""tab"<date>06/28/2022 14:57:52 pm</date>
    "tab""tab"<ip>172.16.137.69</ip>
    "tab""tab"<agent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53
    Safari/537.36 Edg/103.0.1264.37</agent>
    "tab"</event>
    </doorlog>
Devi accedere o registrarti per scrivere nel forum
1 risposte