Quello che vado postando è un file che contiene una semplice classe in grado di creare un file XML.
Ovviamente è una versione alfa, funzionante ma pregna di possibilità inespresse
Tanto per capirci è possibile modificarne l'intestazione in modo da definire una codifica diversa da quella predefinita che utf-8, di fatto l'unica che tendo ad utilizzare nei miei progetti, ma mica a tutti piace
File: creaxml.class.php
sia chiaro che essendo rilasciata sotto GPL3 valgono tutte le regole di questa licenza, prime fra tutte che chi la usa è pregato di citarne la fonte e che inoltre viene rilasciata così com'è ovvero i bugs vanno fatti notare se volete ma non potrete prendervela con me per ciò che vi possono causare 
Come la si usa!
Per esempio richiamandola da un'altra classe (anche perché non si può fare altrimenti
)
File: miofile.php
Semplice? Abbastanza, come detto è in alfa e quindi soggetta a grossissime modifiche, modifiche che ovviamente si possono apportare anche qui sul forum, considerate solo di mantenerla semplice.
Alcune modifiche da apportare sicuramente sono nella gestione degli errori.
Il file di implementazione è in bianco visto che per ora la classe non esporta nulla e quindi rimane inutilizzato al momento.
Have fun.
Ovviamente è una versione alfa, funzionante ma pregna di possibilità inespresse

Tanto per capirci è possibile modificarne l'intestazione in modo da definire una codifica diversa da quella predefinita che utf-8, di fatto l'unica che tendo ad utilizzare nei miei progetti, ma mica a tutti piace

File: creaxml.class.php
PHP:
<?php
/*
Marco Grazia
13 marzo 2010
versione 0.0.2
rilasciata sotto GPL v.3
Crea un file xml
*/
interface intCreaXML {} // fine interfaccia intCreaXML
class creaxml {
protected $dom = null;
function __construct() {} // __construct()
// Crea l'intestazione del file XML e impone la regola di indentare il codice per poterlo leggere meglio.
// Questa in una versione più avanzata potrebbe essere opzionale, dopotutto l'indentazione prende spazio ;-)
protected function inizializzaXML() {
$this->dom = new DOMDocument( '1.0', 'utf-8' );
$this->dom->preserveWhiteSpace = false;
$this->dom->formatOutput = true;
} // inizializzaXML()
// Crea un attributo con testo all'interno.
// @parent nodo del dom
// @nodo stringa (nodo dove va inserito l'attributo)
// @attributo stringa (nome dell'attributo)
// @testo stringa (valore dell'attributo)
protected function createAttributeText( $parent, $nodo, $attributo, $testo ) {
try {
$nodo = $parent->getElementsByTagName( $nodo )->item(0);
$attributo = $nodo->setAttributeNode( new DOMAttr( $attributo, $testo ));
} catch (DOMException $err) {
echo 'Errore! '. $err->getMessage();
exit();
}
} // createAttributeText()
// Crea un elemento XML e se previsto vi inserisce del testo
// @nodo nodo del dom
// @elemento stringa (nome dell'elemento da creare)
// @testo stringa (valore da inserire, può essere nullo per creare dei nodi vuoti)
protected function createElementText( $nodo, $elemento, $testo = null ) {
try {
$elemento = $nodo->appendChild( new DOMElement( $elemento ));
// Se c'è del testo (non nullo) lo scrive, se no passa oltre.
if ( !is_null( $testo ) ) {
$testo = $elemento->appendChild( new DOMText( $testo ));
}
} catch (DOMException $err) {
echo 'Errore! '. $err->getMessage();
exit();
}
} // createElementText()
// Crea un elemento XML e vi inserisce del testo in un campo CDATA come sopra ma con un campo CDATA.
protected function createElementTextCDATA( $nodo, $elemento, $testo ) {
try {
$elemento = $nodo->appendChild( new DOMElement( $elemento ));
$testo = $elemento->ownerDocument->createCDATASection( $testo );
$elemento->appendchild( $testo );
} catch (DOMException $err) {
echo 'Errore! '. $err->getMessage();
exit();
}
} // createElementTextCDATA()
// Salva il file
// @percorso stringa (percorso dove va salvato il file
// @nomeFile stringa (il nome del file :-))
// la funzione ottiene il LOCK del file in fase di scrittura.
protected function salvaXML( $percorso, $nomeFile ) {
// Salva il file nel percorso indicato, mentre lo salva ne acquisice il lock esclusivo.
file_put_contents( $percorso.$nomeFile, $this->dom->saveXML(), LOCK_EX );
unset( $this->dom ); // Libera la risorsa.
} // salvaXML()
} // fine classe intestazione
?>

Come la si usa!
Per esempio richiamandola da un'altra classe (anche perché non si può fare altrimenti

File: miofile.php
PHP:
<?php
require_once 'creaxml.class.php';
class mioXML extends creaxml {
function __construct( $nomefile ) {
$this->inizializzaXML();
$root = $this->dom->createElement( 'root' );
// Root del file
$this->createElementText( $root, 'lingua', 'it' );
$this->createElementText( $root, 'direzione', 'ltr' );
$this->createElementText( $root, 'codifica', 'utf-8' );
$this->dom->appendChild( $root );
// Salva il file ed esce
$this->salvaXML( 'files/', $nomefile.'.xml' );
} // __construct()
} // fine classe creaxml
$obj = new mioXML( $nomefile );
?>
Alcune modifiche da apportare sicuramente sono nella gestione degli errori.
Il file di implementazione è in bianco visto che per ora la classe non esporta nulla e quindi rimane inutilizzato al momento.
Have fun.