Intanto vediamo il codice:
Codice PHP:
error_reporting(E_ALL);
/****************************************************
*** BuildXml class copyright: Mindexperiment
*** write mail to: [email]andrewloyd@libero.it[/email]
*** version: 0.01 alpha
*** this class let you build a correct xml document from a database table
*****************************************************/
class buildXml {

    private 
$db;
    private 
$tabella;
    private 
$dom;

    
/***
    ** @db = collegamento al database per poter eseguire le query di selezione
    ** @dom = collegamento alla classe DOMDocument
    ** @tabella = la tabella da selezionare, questo sarà anche il nome del successivo file xml che si crea
    ***/
    
public function __construct($db$tabella '') {
        
$this->db $db;
        if (
$tabella == '') {
            throw new 
Exception('Devi indicare quale tabella vuoi aggiornare!!');
        }
        
$this->tabella $tabella;
        
$this->__creaHeader();
        
$this->__eseguiQuery();
    }

    
/***
    ** @versione = imposto la versione del documento xml da creare
    ** @cahrset = imposto il charset del documento xml da creare
    ***/
    
public function __creaHeader($versione '1.0'$charset 'UTF-8') {
        
//nuovo oggetto DOMDocument e relativa intestazione del documento xml
        
$this->dom = new DOMDocument($versione$charset);
    }

    
//eseguo la query di selezione
    
private function __eseguiQuery() {
        
//query di selezione dei campi della tabella
        
$this->db->__query("SELECT * FROM %s"$this->tabella);
        if (!
$risultato $this->db->__risultato()) {
            throw new 
Exception('La tabella che stai cercando di recuperare potrebbe non esistere!!');
        }
        
//array di elementi che equivale ai campi della tabella che vogliamo riprodurre come file xml
        
$elementi = array();
        
//array contenente un tag creato al volo per suddividere ogni riga della tabella
        
$contenitore = array();
        while (
$righe $risultato->__fetchArray()) {
            
//il tag fittizio viene creato con le prime 3 lettere del nome della tabella
            
$contenitore[] = $this->dom->createElementsubstr($this->tabella03) );
            
//creo un'elemento xml per ogni campo della tabella
            
foreach ($righe AS $k=>$v) {
                
$elementi[] = $this->dom->createElement($k$v);
            }
        }
        
//creo il file xml con gli array appena creati
        
$this->__creaXml($contenitore$elementi);
    }
    
    public function 
__creaXml($contenitore = array(), $elementi = array()) {
        
//la radice del documento si chiama come la tabella che vogliamo esportare
        
$domRoot $this->dom->createElement($this->tabella'');
        
//atacco la root all'intestazione del documento
        
$this->dom->appendChild($domRoot);
        
        
//per ogni contenitore
        
foreach ($contenitore AS $cont) {
            
$domRoot->appendChild($cont);
        
            
//attacco gli elementi/campi della tabella
            
foreach ($elementi AS $v) {
                
$cont->appendChild($v);
            }
        }
        
        
header('Content-Type: text/xml');
        
//ritorno il documento xml corretto
        
echo $this->dom->saveXML();
    }

Diciamo che la classe funziona quasi bene, l'unico problema stà nel metodo __CreaXml() vi spiego con un'esempio:
Tabella: artisti
Campi: nome - cognome - indirizzo
riga 1: valore1 - valore1 - valore1
riga 2: valore2 - valore2 - valore2

Il risultato è:
Codice PHP:
<?xml ......?>
<artisti>
<art />
<art>
<nome>valore1</nome>
<cognome>valore1</cognome>
<indirizzo>valore1</indirizzo>
<nome>valore2</nome>
<cognome>valore2</cognome>
<indirizzo>valore2</indirizzo>
</art>
</artisti>
Come si nota il primo <art/> che risulta essere un tag vuoto, dovrebbe essere il contenitore dei "valore1".. Da questo deduco che sia un problema nei due foreach sul metodo __creaXml() sicuramente è una ca***ta ma sono troppo fuso per risolvere, cosi chiedo a voi..

Se avete anche altri consigli da dare, al momento la classe è basilare, successivamente dovrò fare in modo di salvare il tutto in file.xml per poi lavorare solo su quelli.. aggiorno il db, si aggiorna l'xml e presento il tutto con xslt javascript e via dicendo.. risparmiando il server..

Ringrazio quanti avranno la pazienza di darci un'occhiata, magari copiatela e provate cosi vedete con i vostri occhi il risultato.. e mi dite cosa va e cosa è da migliorare..
Thanks