Classe générique pour parser tout type de fichier xml

mams004 Messages postés 5 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 14 janvier 2010 - 13 janv. 2010 à 17:33
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 - 14 janv. 2010 à 08:41
Bonjour,

je cherche desespérement une classe php générique pour parser tout type de ficher XML


Si vous connaisser des liens ou tuto?

merci pour votre aide

4 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
13 janv. 2010 à 19:11
Salut,

Pourquoi ne pas simplement chercher dans la doc de php ?

SimpleXMLElement ?
DOM ?

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0
mams004 Messages postés 5 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 14 janvier 2010
14 janv. 2010 à 08:26
bonjour, merci bien pour votre réponse

mais je vous explique le problématique :

On voudrai mettre en place une classe générique dans un serveur qui peut parser tout type de fichier xml
La forme du fichier xml peut changé en tout moment , dans ce cas ce que je veux c'est de ne pas modifier la class à chaque fois que la structure des balises du fichier XML change ou c'est impossible ?

Donc si j'ai bien compris le traitement efféctué par cette classe s'arrete tous simplement au parsing.

C'est mon travail alors de faire un foreach pour traité les données à l'affichage comme dans les tuto avec simple XML ?

merci
0
mams004 Messages postés 5 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 14 janvier 2010
14 janv. 2010 à 08:37
Pour être plus précis j'utilise zend pour le moteur de mon appli
j'ai déjà fait comme ça et ça marche bien :

dans le controlleur
//Utilisation de simpleXML
    	$list = simplexml_load_file('http://localhost/site/admin/test.xml'); 
    	$this->view->list = $list;


dans la vue :
<?php 
 
if($this->list!="")
{ 
$i=0;
foreach($this->list->medialist as $valeur)
{
// Pour gérer l'alternance des couleurs dans le tableau
$class 	= $i%2?'ligne2':'ligne3';
?>
<tr class ="<?php echo $class;?>">

<td><?php echo $valeur->id;?></td>
<td><?php echo $valeur->size;?></td>

</tr>
<?php
    $i++;
} 
} 
?>


donc ma question est que le parsing se trouve à quel niveau dans ces deux bout de code, si la structure du xml change ces codes aussi doit changé ?

merci pour votre conseil
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
14 janv. 2010 à 08:41
Salut,

Donc si j'ai bien compris le traitement efféctué par cette classe s'arrete tous simplement au parsing.

Ben oui, puisque tu dis :
je cherche desespérement une classe php générique pour parser tout type de ficher XML


La forme du fichier xml peut changé en tout moment , dans ce cas ce que je veux c'est de ne pas modifier la class à chaque fois que la structure des balises du fichier XML change ou c'est impossible ?

Ben... Il n'est pas possible de créer une classe (ou n'importe quoi) qui soit capable de s'adapter à quelque chose qu'on ne connaît pas d'avance. Le principe d'un progamme, c'est justement d'être programme : ça veut bien dire qu'il faut prévoir les traitement qu'il devra effectuer.
Donc à moins de savoir précisément comment la structure du fichier XML peut évoluer, non, ce n'est pas possible.

Ce qu'il est possible de faire, sans connaître les changements futurs, c'est une classe qui va récupérer certaines informations dans le fichier XML. Ainsi, cette classe peut avoir des méthodes "génériques" pour la récupération de données, qui pourront être réécrites plus tard si la structure du fichier XML change. Par exemple, une méthode getClients() qui retournera la liste des clients, dans un format donné (fixe, déterminé et immuable) qui sera traité toujours de la même façon. C'est alors le rôle de cette méthode d'aller chercher les clients dans le XML et de mettre le résultat en forme pour qu'il soit utilisable en toute circonstance dans le reste du programme. Ainsi, si la structure du XML change, la méthode est réécrite (de façon a toujours récupérer la liste des clients), mais le reste du code, quant à lui, ne change pas, parce que ce que cette méthode renvoit ne change pas.
On peut ainsi imaginer une classe "générique", abstraite, qui définit les méthodes nécessaires au bon fonctionnement du programme et une ou plusieurs classe (concrètes) spécifiques au format du XML.
L'idée est de reproduire le principe de PDO : une classe PDO qui peut implémenter plusieurs classes d'accès à différents SGBDR, sans qu'il soit nécessaire de modifier le code de son programme si on change de SGBDR : on exécute toujours la méthode PDO::query() pour exécuter une requête etc.
Pour continuer l'analogie, c'est comme si un format de XML était un SGBDR différent : on utilise une classe spécifique.

PHP ne fournit que des outils pour parser du XML. La manière de parser et l'accès aux données ne peut pas être générique et dépend de la structure du fichier XML source, de l'utilisation qui est faite des données, etc. C'est donc au développeur de créer des outils qui lui permettent d'avoir cette souplesse. En y pensant correctement au début, on peut aboutir à une classe dont seul le contenu des méthodes sera modifié, n'impactant ainsi pas le reste du programme.

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0
Rejoignez-nous