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

Soyez le premier à donner votre avis sur cette source.

Vue 8 149 fois - Téléchargée 898 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

willeraser
Messages postés
56
Date d'inscription
mercredi 15 octobre 2003
Statut
Membre
Dernière intervention
6 mai 2009
-
Ca fait vraiment plaisir de voir ce genre de sources de temps en temps !
cs_aKheNathOn
Messages postés
575
Date d'inscription
dimanche 23 décembre 2001
Statut
Membre
Dernière intervention
23 octobre 2012
-
merci, ça fait plaisir d'avoir ce genre de commentaire également :))
kankrelune
Messages postés
1305
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015
-
Yes source qui peut s'avérer très utile... je ne note pas car je n'ai pas regardé le code en détail... plus tard peut être... mais aillant déjà vu ta façon de coder je ne me fait pas trop de souci... .. . ;o)

@ tchaOo°
tunfilsdepute
Messages postés
4
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
24 novembre 2008
-
Bravo Bravo et encore Bravo belle source et man et en plus cela fonctionne Encore Merci

ps J'approuve la charte de bonne conduite
picaspliff
Messages postés
4
Date d'inscription
mardi 2 avril 2002
Statut
Membre
Dernière intervention
21 juillet 2009
-
Super code, Merci beaucoup !
Je me demande juste comment gérer du code html stocké dans le fichier XML...

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.