Classe per la scrittura di un file XML

MarcoGrazia

Utente Attivo
15 Dic 2009
852
20
28
62
Udine
www.stilisticamente.com
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 :D
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
?>
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 :D)
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 );
?>
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.
 

MarcoGrazia

Utente Attivo
15 Dic 2009
852
20
28
62
Udine
www.stilisticamente.com
La nobiltà non c'entra, la classe principale serve a definire le funzioni di base, la seconda a implementare dei metodi.
Parafrasando si può dire che per accedere ad un database puoi usare le funzioni predefinite del php o decidere di usare mysql da linea comando.
La classe principale è abbastanza astratta, in realtà molto poco dato che faparte di un progetto più ampio, ma permette di aprire/creare un file xml e scrivere dentro.
La senconda implementa un tipo di file xml.
Ah dimenticavo usano il DOM ;)
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
mettila in download da qualche parte che te la recensisco e la linko su Mrwebmaster nella sezione degli script
 
Discussioni simili
Autore Titolo Forum Risposte Data
macus_adi Classe PHP per la Geolocalizzazione del visitatore Snippet PHP 0
A [PHP] metodo di una classe per estrarre i dati con ciclo while PHP 1
L Problemi con classe di astrazione per il database PHP 20
J Problema classe per preview post PHP 2
L classe per gestire login in mysql PHP 1
M Classe in php 4 per generare file in Excel PHP 4
B ciclo con array, assegnare una classe differente per ciascun risultato PHP 3
simonetta619 creare una classe per rendere dinamico l'inserimento PHP 0
L classe per inserire dati al database PHP 2
M Consigli/Critiche su classe per la traduzione PHP 2
A Classe per connessione MySqli PHP 6
matrobriva Classe per elencare ed aprire file contenuti in un archivio zip PHP 3
emanuelevt funzione per entità html e classe PHP 1
M Classe per paginazione record PHP 8
I Aiuto per classe mysql PHP 5
D Esistono eventi per i moduli non di classe? Visual Basic 0
M Classe per OCR in Java Java 2
N classe per la gestione dell'autenticazione Snippet PHP 0
A classe per invio mail PHP 1
G classe CSS sovrascritta HTML e CSS 2
L php tinymce mi duplica la classe label PHP 3
P jButton1ActionPerformed passare parametri ad altra classe Java 2
L creare oggetti da una classe tramite un form Javascript 0
A Riproduzione classe Vector C/C++ 3
C [PHP] Estrarre da una classe i valori che mi interessano PHP 5
O Estendere una rete di classe C Reti LAN e Wireless 1
tucu49 PHP include classe PHP 8
M [PHP] Estendere Connessione a una Classe PHP 1
M [PHP] utilizzo di una classe e delle sue funzioni PHP 2
tritabit Classe MysqliDb mancante nelle librerie arc2 PHP 2
D [PHP] assegnare una classe PHP 1
W [PHP] Creazione classe PDO PHP 4
S Copiare attributi da una classe. Programmazione 0
D [PHP] chiamata metodi da una classe PHP 3
L [PHP] login con la classe medoo.in PHP 5
B [Javascript] Cambiare classe ed aggiornare relativi eventi Javascript 3
M [wordpress-galleria immagini]Inserire classe php in html PHP 0
L [PHP] Classe che non vede i suoi metodi PHP 3
A [Javascript] Mancata aggiunta di una classe al click Javascript 1
C [PHP] Metodo di una classe in sltra classe PHP 1
Shyson [WordPress] Mettere classe css WordPress 0
V [PHP] utilizzo di metodi statici in altra classe PHP 5
Sevenjeak [C#] Aiuto esportazione tema su libreria di classe ( dll ) .NET Framework 1
elpirata [PHP] [RISOLTO] Stampare classe css in base al risultato della query PHP 6
C Classe Prenotazione con 2 scelte Java 2
A modificare .jar con classe personalizzata Java 9
Rikk73 Passare come argomento in un metodo un parametro della classe istanziata PHP 0
M Visualizzare da una classe esistente ogni profilo utente PHP 1
napuleone Modificare attributi di una classe con js Javascript 2
C Upload immagini con classe non funzionante PHP 1

Discussioni simili