Classe simple de création de fichier xml

Soyez le premier à donner votre avis sur cette source.

Snippet vu 21 506 fois - Téléchargée 23 fois

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

Ajouter un commentaire

Commentaires

systemat
Messages postés
1
Date d'inscription
mercredi 16 janvier 2008
Statut
Membre
Dernière intervention
6 mai 2008

Bonjour, pas de problème pour le php 4, veiller à laisser le constructeur quand même ;-).

Si pas, j'ai modifié la classe pour l'insertion d'attribut dans les balises xml... Par contre, je ne sais pas où la placer pour que tout le monde la voit, alors filez votre mail et je vous l'enverrai.

Et bravo, pastis51...
cs_krma
Messages postés
20
Date d'inscription
samedi 20 septembre 2003
Statut
Membre
Dernière intervention
14 août 2008

Bonjour,
pour php4 ca ne semble pas fonctionner, en changeant les private en var ...
Quelqu'un a essayé en php4 déjà ?
ydiouf19
Messages postés
1
Date d'inscription
vendredi 4 mai 2007
Statut
Membre
Dernière intervention
4 mai 2007

bon code
nacer183
Messages postés
20
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
4 avril 2007

bonjour, je teste ce code il ne marche pas avec wamp (php5,MySQL5,apache2)est-ce-qu'il y a des modification dans php pour qu'il marche? je besoin d'une réponse dans le plus courte durée,merci
pastis51forever
Messages postés
180
Date d'inscription
dimanche 29 juin 2003
Statut
Membre
Dernière intervention
8 septembre 2006

Ok, ca m'a l'air interessant tout ca...
Je finis 2 3 trucs et je m'y plonge...
Merci encore de faire profiter ton experience aux ptits jeunes du php...
Afficher les 15 commentaires

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.