Quarda, XMl è molto potente.. certo, un database è molto più veloce, ottimizzato ecc... io però sto parlando di un log, o al max di un sito internet di medie dimensioni.. Usare XML è efficacie solamente se i dati da immagazzinare non sono eccessivi (per eccessivi intendo che il file XML non superi la dimensione di 200-300Kbyte)..in genere uso questa tecnica:
Il file/files xml li uso solamente per la logica strutturale dell'applicazione web (indici, strutture gerarchiche ecc...) e poi uso file di testo normali per le parti con contenuti xHTML da includere poi un una pagina PHP al momento della complilazione.. in pratica una cosa del genere:
Codice PHP:
<root>
<comment id="1" data="gg/mm/aaa" ip="xx.xx.xx.xx" titolo="blablalba" include="comm_1.txt" />
ECC...
</root>
In questo caso php+DOM ti danno l'opportunità di scandire/esaminare la struttura xml e poi puoi ad esempio recuperare in giusto file di include, e includerlo nella tua pagina php, così da mostrarlo!
DI SEGUITO UN O DI FUNZIONI DI ESEMPIO PER ESAMINARE/MODIFICARE/MANIPOLARE un XML DA PHP
Codice PHP:
<?php
/* Funzione che crea un documento xml partendo dal
* nome del file xml e il nome dell'elemento root */
function new_xml_doc($path_xml_file, $root_node_name){
/* creo il documento base */
if(!file_exists($path_xml_file)){
//creo il file vuoto
$f = fopen($path_xml_file, "w") or
die("Impossibile creare il file $path_xml_file");
fclose($f);
/*Scrivo nel file il root node*/
$doc = domxml_new_doc('1.0');
$root = $doc->create_element($root_node_name);
$doc->append_child($root); //metto il nodo radice nel document
/*Scrivo il file*/
$doc->dump_file(realpath($path_xml_file), false, false) or
die("Errore durante la scrittura del file xml: $path_xml_file");
$doc = null;
}
}
?>
Codice PHP:
<?php
/* Permette di effettuare le modifiche ad un file xml */
function doc2file($doc, $path_xml_file){
/* backup del file dati */
@copy($path_xml_file, $path_xml_file . ".old") or
die("errore durante la copia del file di backup");
$doc->dump_file(realpath($path_xml_file), false, false) or
die("Errore durante la scrittura del file xml: $path_xml_file");
}
?>
Codice PHP:
<?
/* Inserimento di una nuova entry */
function add_element($path_xml_file, $nome, $descrizione){
new_xml_doc($path_xml_file, "root"); //creo il document base se non esiste
$doc = @domxml_open_file($path_xml_file);
$root = $doc->document_element(); //il nodo root
$id_max_entry = get_max_id($path_xml_file); //l'id massimo delle entry
/* creo l'antry nuova con i figli */
$entry = $doc->create_element("entry");
$entry->set_attribute("id", $id_max_entry + 1);
$nome_nodo = $doc->create_element("nome");
$descr_nodo = $doc->create_element("descrizione");
/* i contenuti dei figli */
$nome_cdata_nodo = $doc->create_cdata_section($nome);
$descr_cdata_nodo = $doc->create_cdata_section($descrizione);
/* append */
$nome_nodo->append_child($nome_cdata_nodo);
$descr_nodo->append_child($descr_cdata_nodo);
$entry->append_child($nome_nodo);
$entry->append_child($descr_nodo);
$root->append_child($entry);
/* scrivo le modifiche nel file */
doc2file($doc, $path_xml_file);
}
?>
Codice PHP:
<?
/* Restituisce il numero di entrues */
function get_num_of_entryes($path_xml_file){
$query = "/root/entry"; //query XPath per contare le entryes
new_xml_doc($path_xml_file, "root"); //creo il document base se non esiste
$doc = @domxml_open_file($path_xml_file);
/* Recupero numero entryes tramite Xpath per l'id univoco */
$xp = $doc->xpath_new_context();
$xpathObj = $xp->xpath_eval($query);
return count($xpathObj->nodeset); //Numero totale delle entry
}
?>
Questi sono solamente piccolissimi esempi... per tutte le altre info:
http://it.php.net/manual/it/ref.domxml.php
PS: naturalmente gli sforzi di implementazioni sono molto maggiori rispetto all'usare un database... qui tutti il parser occorre farlo programmaticamente..non basta usare query SQL
VVoVe: Ho iniziato ad implementare siti basati su XMl come "database" puramente per curiosità, ed ora non riesco a liberarmene!