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 nud.
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 {
/**
public function __construct() {
$this->hasMany('user');
$this->mapTag('user', 'user');
parent::__construct('users.xml');
}
/**
public function findUser($login) {
foreach($this->user as $u) {
if ($u->login == $login) return $u;
}
}
/**
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;
}
}
/**
class user extends xmlNode {
/**
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.
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.