Aggiornare un file XML

Ho la necessità di aggiornare un piccolo file XML, dove tengo un piccolo database di informazioni utili agli utenti (FAQ).

Leggerlo tramite le SimpleXML è semplicissimo, ma aggiornarlo sembrerebbe proprio di no, infatti AsXML() non appende al file nulla, ma lo riscrive da capo.

Troppo complessa anche la scrittura di una funzione ad hoc usando le librerie standard per XML, se qualcuno conosce un metodo alternativo mi farebbe piacere parlarne.

La struttura del file è questa:

<?xml version='1.0' ?>
<faq num='1'>
   <domanda><!CDATA[[segue domanda]]></domanda>
   <risposta><!CDATA[[segue risposta]]></risposta>
</faq>
<faq num='2'>
   <domanda><!CDATA[[segue domanda]]></domanda>
   <risposta><!CDATA[[segue risposta]]></risposta>
</faq>
<faq num='3'>
   <domanda><!CDATA[[segue domanda]]></domanda>
   <risposta><!CDATA[[segue risposta]]></risposta>
</faq>

l'utilizzo della sezione cdata, mi server perché le domande e le risposte devono utilizzare entità ma anche elementi xhtml, insomma un sistema misto, e comunque quello è un problema già risolto, mi manca solo di realizzare un semplice sistema di aggiornamento del file.

PS ho trovato questo: http://linuxcommand.org/man_pages/xmllint1.html bell sistema di man online, meglio di altri che ho visto :D

inviato 10 anni fa
Marco Grazia
modificato 10 anni fa
X 0 X

Potresti fare un parser casalingo con una bella espressione regolare:

<?php
$testo = "<?xml version='1.0' ?>
<faq num='1'>
   <domanda><!CDATA[[segue domanda]]></domanda>
   <risposta><!CDATA[[segue risposta]]></risposta>
</faq>
<faq num='2'>
   <domanda><!CDATA[[segue domanda]]></domanda>
   <risposta><!CDATA[[segue risposta]]></risposta>
</faq>
<faq num='3'>
   <domanda><!CDATA[[segue domanda]]></domanda>
   <risposta><!CDATA[[segue risposta]]></risposta>
</faq>";

$faq = array();
preg_match_all("|<faq num='(.*)'(.*)<domanda><!CDATA\[\[(.*)\]\]></domanda>(.*)<risposta><!CDATA\[\[(.*)\]\]></risposta>(.*)</faq>|Us",$testo,$risultati,PREG_SET_ORDER);
foreach ($risultati as $riga) {
   $faq[$riga[1]] = array('domanda'=> $riga[3], 'risposta'=>$riga[5]);
}
print_r($faq);
?>

Aggiornare l'array e ricreare l'XML sarebbe abbastanza semplice.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Vero, ma dovrei riscrivere sempre il file da capo e comunque potrebbe essere un'idea, in fondo è una cosa da pochi kilobyte.

risposto 10 anni fa
Marco Grazia
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda