begin process at 2012 05 27 22:18:54
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Xml

 > CLASSE SIMPLE DE CRÉATION DE FICHIER XML

CLASSE SIMPLE DE CRÉATION DE FICHIER XML


 Information sur la source

Note :
8,67 / 10 - par 3 personnes
8,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Xml Classé sous :xml, classe, ecriture, fichier Niveau :Débutant Date de création :30/06/2006 Date de mise à jour :06/07/2006 10:06:48 Vu :19 807

Auteur : pastis51forever

Ecrire un message privé
Site perso
Commentaire sur cette source (15)
Ajouter un commentaire et/ou une note

 Description

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

  • <?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>
  • */
<?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-


 Historique

30 juin 2006 16:18:07 :
changement des < en &lt; et & en &amp;
06 juillet 2006 10:06:48 :
Suppression de l'indentation et des sauts de lignes... Merci Malalam pour les explications.

 Sources du même auteur

Source avec Zip PHP5 - ARBORESCENCE SERVEUR + SUIVI PROJET
SIMPLIFIER LES PARAMÉTRAGES DE VOTRE SITE

 Sources de la même categorie

Source avec Zip JEU FRISE CHRONOLOGIQUE EN XML par mldvb
OBTENIR LES TAUX DE CHANGE DU JOUR EN EUROS par oallais
Source avec Zip AFFICHER LES FILM EN SALLE par slhuilli
Source avec Zip Source avec une capture MINI-PROCESSEUR XPROC (PIPELINE XML) par ordiman85
Source avec Zip Source avec une capture XML MAPPING TO CLASS OBJECTS / CHARGEMENT / PARSING / MODIFI... par aKheNathOn

 Sources en rapport avec celle ci

Source avec Zip CLASSE SIMPLE DE GESTION DE FICHIERS par alexarbitre
Source avec Zip CLASS DE LOG PHP5 par dorian91
Source avec Zip PHP 5 CLASSE DE LOG PARAMÉTRÉE PAR UN FICHIER XML par morpheus57
Source avec Zip [PHP5/DOM] CLASSE DE CREATION DE FLUX RSS VIA UN FICHIER XML par jean84
Source avec Zip [PHP5] CLASSE DE LOG par malalam

Commentaires et avis

Commentaire de Mikiman le 30/06/2006 21:09:34

Salut !

J'aime beaucoup ta classe, bravo !

Commentaire de FhX le 01/07/2006 16:31:05

A savoir qu'on peut aussi utiliser le DOM pour faire de la génération de XML :)

Commentaire de Skreo le 03/07/2006 03:48:23

J'avais aussi fait une classe dans le genre, mais en fait je trouve qu'il est plus simple, moins lourd et plus lisible de faire directement du xml ^^

Commentaire de pastis51forever le 03/07/2006 09:54:11

FhX-> J'aurais préféré utiliser DOM pour mon site, mais malheureusement, il n'est pas disponible chez mon hebergeur.
(depuis PHP5, il n'est plus installé par défaut...)

Skreo->Ca c'est l'eternelle question... Perso j'ai opté pour cette solution, car elle permet d'être sûr de faire un fichier xml propre et bien indenté, et de ne pas avoir à se prendre la tête à trop vérifier si on a bien refermé chaque balise, surveiller la casse, etc...

En tout cas, merci pour vos commentaires

Commentaire de FhX le 03/07/2006 14:17:46

Le DOMdocument n'est pas installé par défaut ? Je croyais qu'il faisait parti du coeur de PHP5 ?!
Etrange ca...

Commentaire de pastis51forever le 03/07/2006 14:49:50

En tout cas, c'est ce qui est prévu...
http://uk.php.net/manual/fr/ref.domxml.php
Et personnellement, je n'ai pas réussi à l'utiliser, je pense pour cette raison.

Commentaire de Skreo le 04/07/2006 14:49:51

pastis51forever>> Après il faut choisir entre facilité et performance ^^

Commentaire de malalam le 05/07/2006 12:47:40 administrateur CS

Hello,

l'idée est bonne :-)
Mais, il faut bien quelques mais... ;-)
Tout d'abord, le 1er truc qui me choque vraiment, ce sont tes retours chariots dans le flux XML. Ils n'ont pas grand chose à faire là-dedans! D'autant plus qu'un retour chariot va dépendre de l'OS...bref, je suis contre. Il y a des logiciels pour visualiser un flux XML. Pas besoin de mettre des retours chariots dedans. Et surtout, ils n'ont rien à faire dans un flux XML, j'insiste ;-)

Ensuite, je suis un peu surpris de tes 2 méthodes creer_xml::entrer() et creer_xml::ligne().
Dans le fonc, il n'y a pas de différence : tu crées une balise. Dans un cas, tu autorises de donner un texte à ta balise. Bon. Et tu fais une différence avec ce que tu appelles un noeud ouvert et un noeud en ligne. Mais c'est une fausse différenciation. Rien n'empêche d'avoir :
<parent>bla<child>bli</child></parent>.
C'est donc une différenciation un peu perturbante. ET on ne peut pas créer de xml de cette forme avec ta classe, à priori.
De plus, ta classe fonctionne séquentiellement. C'est à dire, une fois qu'on a écrit une "ligne", on ne peut pas insérer une nouvelle "ligne" avant.
Pas d'attributs, dommage.

Si je puis me permettre, tu peux jeter un oeil sur ma classe XML Menu, présente sur phpcs. IL y a une version sans DOM pour générer le flux XML d'un menu. Le principe est différent, MAIS, tu dois pouvoir t'en inspirer pour autoriser la création d'attributs, et la possibilité d'insérer des éléments où tu le désires dans le flux xml.




Commentaire de pastis51forever le 05/07/2006 13:31:38

Malalam: Tu as entièrement raison... Mais en postant ca, j'étais conscient de la majeure partie de ce que tu m'as dit. Je l'ai créée pour des besoins simples et surtout pour permettre de creer le fichier le plus simplement possible, et pouvoir le modifier, si necessaire avec un editeur de texte.
Par contre, je suis surpris de ta remarque sur les \n...
Avant de les mettre, je m'etais justement posé la question, et je les ai mis a la suite de la lecture d'une réponse que tu as apportée à skaaar sur ta source http://www.phpcs.com/codes/PHP5-XML-OBJECT-SERIALIZER-UNSERIALIZER_36671.aspx .
Enfin, pour le moment, cette classe me suffit telle quelle, mais par la suite, si elle vient à évoluer (y'a de fortes chances, vu qu'elle est toute neuve et que je débute dans le xml), j'en profiterais pour prendre en compte completement ce que tu m'as dit.

En tout cas merci pour cette étude approfondie

Brice

Commentaire de malalam le 05/07/2006 14:02:06 administrateur CS

Mates ma source, tu verras que je n'ai pas utilisé de \n \r etc...
J'ai juste formatté l'affichage, via une méthode spécifique d'affichage. Elle est indépendante de la création du flux XML. Le flux XML en lui-même ne possède aucune mise en forme (ce n'est pas le but de XML du tout). Mais par contre, j'autorise un affichage plus user-friendly via une méthode utilisant du XSL (pour shématiser). Mais le flux, j'insiste, n'est pas touché.

Commentaire de pastis51forever le 05/07/2006 20:36:17

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...

Commentaire de nacer183 le 24/03/2007 17:56:07

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

Commentaire de ydiouf19 le 04/05/2007 13:07:41

bon code

Commentaire de krma le 30/10/2007 09:33:58

Bonjour,
pour php4 ca ne semble pas fonctionner, en changeant les private en var ...
Quelqu'un a essayé en php4 déjà ?

Commentaire de systemat le 06/05/2008 11:52:30 10/10

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...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Lecture de fichier XML [ par stigmate101 ] Bonjour,J'ai écris un code qui dois chercher un enregistrement dans un fichier XML. Ce code ne me m'affiche rien et ne me retourne pas d'erreur! Cl ecriture de XML problème d'encodage [ par lounkokobi270987 ] Bonjour a tous J'ai un petit probleme qui me donne des gros mot de tête:J'aimerai modifier un fichier XML en PHP et le réecrire aprés dans mon fichier Ecriture d'un fichier excel [ par tanine ] Bonjour à tous!je suis débutante en Programmation web.et je dois réaliser un site web avec un espace destiné aux professeurs.Cet espace devra leur per génération d'un fichier xml +bd [ par pandouta08 ] bonjour,s'il vous plait je voudrais savoir le code d'un générateur d'un fichier xml en php à partir d'une base de donnée mysql.merci. widget avec flux rss [ par pandouta08 ] j'ai un code php d'un générateur d'un fichier xml contenant un ensemble de lien et j'ai un widget yahoo que j'ai créé ,je veux que mon widget yahoo af BD MySql vers fichier XML [ par lachaiseduroi ] Bonjour, J'ai créer une base de données Mysql avec 6 tables et je recherche comment l'exporter en un fichier XML. Je débute en PHP et Mysql et bien en probleme pour lire fichier xml [ par brudao ] bonjour! j'avais vu exemple de code sur un forum qui parcourait un fichier xml.j'ai modifié le code et ça marche sur ma machine mais lorsque je teste PHP - Lecture fichier XML [ par conan76 ] Bonjour,Dans le but d'importer des données d'une structure (ASP.Net/Intranet) à une autre (PHP/Internet)  afin de les exposer à la clientèle, le choix Lecture XML via simplexml_load_file() génère une erreur "Input is not proper UTF-8, indicate encoding !" [ par karpediem ] Bonjour @ toutezéatous,J'ai un petit pb lorsque j'essaie de lire un fichier XML qui m'est transmis par un prestataire. C'est ma première expérience de Probleme pour classer les info d'un xml tiré de deux tables [ par scoubydog ] Bonjour, j'ai un petit soucis pour ordonner mes résultats lors de la création d'un fichier xml à partir d'un fichier php.Je demande à mon fichier php


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,686 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales