Xml mapping to class objects / chargement / parsing / modification et creation xml simplifiée

Soyez le premier à donner votre avis sur cette source.

Vue 10 946 fois - Téléchargée 1 036 fois

Description

Cette classe vous permet de manipuler du XML très facilement.

Elle vous permet de :
  • Parser du xml
  • Lire de fichier sous la forme d'objets
  • Surcharger les objets de chaque noeud
  • De manipuler intuitivement les données
  • De sauvegarder les modifications


Un exemple est joint à la classe, le cas d'étude est de manipuler une liste d'utilisateurs dans un fichier XML.

Explication :
-------------

Un seul fichier contient la définition de la classe, c'est xml.class.php.

La classe xmlNode définit de manière générique le contenu du nœud.

La classe xmlMap définit le chargement, lecture et sauvegarde d'un fichier. Elle représente également les données du noeud parent du document xml et elle hérite de xmlNode.

C'est possible de surcharger cette classe, dans ce cas dans le constructeur vous pouvez utiliser les fonctions suivantes :
  • hasMany(tagname) : indique de tel tag est une liste / permet de le mettre dans un array même si un seul tag est trouvé.
  • mapTag(tagname, classname) : charge la classe spécifiée pour le tag indiqué. La classe indiquée doit hériter de xmlNode


D'autres options sont dispo, à regarder dans xml.class.php

Source / Exemple :


// EXEMPLE DE MAPPING : users.class.php
<?php

	/**

  • XML Map Demo Class
  • @license GNU/GPL
  • @version 1.0.0
  • @author I. CHIRIAC
  • /
class users extends xmlMap { /**
  • Load users
  • /
public function __construct() { $this->hasMany('user'); $this->mapTag('user', 'user'); parent::__construct('users.xml'); } /**
  • Search an user
  • /
public function findUser($login) { foreach($this->user as $u) { if ($u->login == $login) return $u; } } /**
  • Try to login
  • /
public function connect($login, $password) { $user = $this->findUser($login); if ($user) { $ok = $user->login($password); if ($ok) $this->save(); // SAVE LOGIN DATE return $ok; } else return false; } } /**
  • User class
  • /
class user extends xmlNode { /**
  • Try to login
  • /
public function login($password) { if ($this->password == $password) { $this->lastLogin = time(); return true; } else { return false; } } /**
  • Get the last connection date
  • /
public function getLastLogin() { if ($this->lastLogin > 0) { return date('Y-m-d H:i:s', $this->lastLogin); } else return 'never'; } } ?>

Conclusion :


Vous n'avez pas besoin de surcharger la classe de mapping pour chaque fichier, il saurra nativement interpréter la structure.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
marrodeur Messages postés 6 Date d'inscription jeudi 19 février 2004 Statut Membre Dernière intervention 4 mai 2011
4 mai 2011 à 19:59
Bonjour,

Belle class tres utile.
J'aimerai avoir un fichier xml dans ce format as tu le code?
Acctuelement d apres se que j ai pu voir il faut modifier la class ca pourrais etre sympas de donner la possibilité de choisir son format ^^

<?xml version="1.0"?>



Je demande peu etre beaucoup mais c'est ma contribution ;)
cs_aKheNathOn Messages postés 575 Date d'inscription dimanche 23 décembre 2001 Statut Membre Dernière intervention 23 octobre 2012
31 juil. 2009 à 10:22
Merci à tous pour vos commentaires, ça fait super plaisir d'être utile :).

Pour info je l'ai utilisée sur un cms eCommerce à la place d'une base de données directement et la montée en charge se passe très bien, manquerait éventuellement un système de cache pour le charger en mémoire et ne pas parser les fichiers à chaque fois.
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
30 juil. 2009 à 22:27
Hi,

après une longue absence, je reviens. Ca fait plaisir de retrouver un de tes codes. Très joli, comme toujours, intéressant et utile.
picaspliff Messages postés 4 Date d'inscription mardi 2 avril 2002 Statut Membre Dernière intervention 21 juillet 2009
21 juil. 2009 à 09:14
Je stocke des données sur des voyages dans un fichier XML.
Pour chaque voyage je mets l'adresse d'une carte google maps que je mets dans une iframe.
bouztarak25 Messages postés 5 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 16 juin 2008
20 juil. 2009 à 19:38
Ca a l air très sympa comme idée ce code..!! Bravo aKheNathOn ;)

Picaspliff, comme tu vas utiliser ce code pour Goole Maps, il sert à quoi au fait?

Merci et à bientôt :)
Afficher les 16 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.