Classe simple de création de fichier xml

Contenu du snippet

Comme le titre l'indique, c'est juste une classe (simple) pour créer un fichier xml.
Rien de bien fou, mais vachement pratique.

Il y a surement un maximum de choses rajouttables (je suis à votre écoute), particulièrement au niveau des vérifications...

L'utilisation que j'en ai est simpliste, ce qui fait que je n'y ai pas géré beaucoup de choses... juste:
-L'encodage (choix, mais ISO-8859-2 par défaut)
-Les noeuds ouverts (je sais pas si ca s'appelle comme ca), qui sont ceux qui en contiennent d'autres
-Les noeuds normaux (Ca m'étonnerait que ca s'appelle comme ca), du genre <a>b</a>
-Les commentaires

Le fichier qui en sort est indenté comme il se doit.
Pour une utilisation plus poussé du xml, cette classe peut servir de base pour une autre plus complète.

J'espère que ca pourra servir

Source / Exemple :


<?php
// Classe pour créer un fichier xml
class creer_xml
	{
	var $nomdufichier;		//Nom du fichier à créer
	private $contenu;		//Buffer
	private $arborescence;		//Arborescence instantanée xml
	
	//Constructeur PHP5
	function __construct( $nomdufichier,$balise_principale,$encoding="ISO-8859-2" )
		{
		//$balise_principale est la balise qui englobe les autres
		//$encoding est l'encodage. J'ai choisi par défaut ISO-8859-2, c'est moins chiant que UTF8
		$this->nomdufichier	= $nomdufichier ;
		$this->contenu		= '<?xml version="1.0" encoding="'.$encoding.'"?>' ;
		$this->contenu		.= $this->entrer($balise_principale) ;
		}
	
	/*//Pour une utilisation en PHP4:
	//Constructeur PHP4
	function creer_xml( $nomdufichier,$balise_principale,$encoding="ISO-8859-2" )
		{
		$this->__construct( $nomdufichier,$balise_principale,$encoding );
		}
	//Penser à remplacer les private en var... ca devrait marcher

  • /
//Crée un noeud ouvert (qui contiendra d'autres noeuds) function entrer( $champs ) { //Ajoute le champs actuel dans l'arborescence instantanée $this->arborescence[] = $champs; //Ecrit le noeud $this->contenu .= '<'.$champs.'>'; } //Ferme le noeud ouvert courrant (ou tous si $quitter = TRUE) function sortir($quitter=FALSE) { //Si on essaie de fermer le dernier noeud sans le vouloir, on affiche un message d'erreur if (!$quitter AND count($this->arborescence)==1) die('Sortie de boucle impossible...'); //On enlève l'élément du tableau le plus bas et on le récupère dans $champs $champs = array_pop($this->arborescence); //On ferme le noeud en question $this->contenu .= '</'.$champs.'>'; //Si on veut tout fermer, petite récursivité pour fermer tous les noeud if ($quitter AND count($this->arborescence)>0) $this->sortir(TRUE); } //Crée un noeud en ligne (ex: <noeud>valeur</noeud>) function ligne( $champs,$valeur ) { $valeur = str_replace('<','<',$valeur); $valeur = str_replace('&','&',$valeur); //Ecriture dans le buffer du noeud $this->contenu .= '<'.$champs.'>'.$valeur.'</'.$champs.'>'; } //Ajoute un commentaire function commentaire( $contenu ) { //Ecriture dans le buffer du commentaire $this->contenu .= '<!-- '.$contenu.' -->'; } //Copie du buffer dans le fichier demandé function creerlefichier() { //On sort de tous les noeuds ouverts $this->sortir(TRUE); //Ouverture du fichier $fichier = fopen($this->nomdufichier,'w+') ; //Ecriture du contenu du buffer $rep = fwrite($fichier,$this->contenu) ; //Fermeture du fichier fclose($fichier) ; //Retour de la réponse, pour pouvoir verifier les erreurs return $rep ; } } ?> /********************************************************/ /* UTILISATION: */ /********************************************************/ include('classe_xml.php'); $xml = new creer_xml('test.xml','soirée'); $xml->commentaire('Liste des membres de l\'association'); $xml->entrer('membres'); $xml->entrer('Jean'); $xml->ligne('Age','32'); $xml->ligne('Ville','Lyon'); $xml->sortir(); $xml->entrer('Jeanne'); $xml->ligne('Age','37'); $xml->ligne('Ville','Toulouse'); $xml->sortir(); $xml->sortir(); $xml->commentaire('Liste des gens invités par l\'association'); $xml->entrer('invites'); $xml->entrer('Joe'); $xml->ligne('Age','28'); $xml->ligne('Ville','Marseille'); //Les 2 lignes commentées ne sont pas nécessaires, sauf peut-etre pour la comprehension /* $xml->sortir(); $xml->sortir();*/ $xml->creerlefichier(); /* LE FICHIER CREE RESSEMBLERA ALORS ETRANGEMENT A: <?xml version="1.0" encoding="ISO-8859-2" ?> <soirée> <!-- Liste des membres de l'association --> <membres> <Jean> <Age>32</Age> <Ville>Lyon</Ville> </Jean> <Jeanne> <Age>37</Age> <Ville>Toulouse</Ville> </Jeanne> </membres> <!-- Liste des gens invités par l'association --> <invites> <Joe> <Age>28</Age> <Ville>Marseille</Ville> </Joe> </invites> </soirée>
  • /

Conclusion :


ATTENTION: CETTE CLASSE N'INDIQUE EN AUCUN CAS LES POSSIBILITES DU FORMAT XML: ELLE PERMET SIMPLEMENT DE CREER UN FICHIER SIMPLE DE CE TYPE. (voir le post de malalam à ce sujet)

-n'ayant acces qu'a php5, si quelqu'un a fait le test en php4, j'aimerais un retour... Merci-

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.