Parser du XML en PHP

Parser du XML en PHP - PHP - Programmation

Marsh Posté le 19-12-2006 à 20:23:05    

Bounjour, j'aimerais parcourir un fichier xml en php afin de remplir ma base de donnée
 
voici le paseur que j'ai fais, il est vraiment le plus simple possible, mais ca marche (du moins sur mon fichier ca marche)
 

Code :
  1. function element_debut($parseur,$nom_elt, $attrs){
  2. echo " $nom_elt ";}
  3. function element_contenu($parseur,$contenu_elt){
  4. echo " $contenu_elt ";}
  5. function element_fin($parseur,$nom_elt){
  6. echo "<br/>";}
  7. $parseur=xml_parser_create();
  8. xml_set_element_handler($parseur, "element_debut", "element_fin" );
  9. xml_set_character_data_handler($parseur, "element_contenu" );
  10. $fic=fopen("Test_parse.aspx", "r" );
  11. while ($don=fread($fic,4096))
  12. {
  13.  xml_parse($parseur, $don);
  14. }
  15. fclose($fic);
  16. xml_parser_free($parseur);


 
le fichier : http://diserv.univ-lyon2.fr/~rlegr [...] parse.aspx
 
Je souhaiterais donc simplement pouvoir récuperer le contenu des balises <title>  <link> et <description>
mais je ne comprend vraiment pas comment faire, je pense pas que ce soir bien compliquer même si je suis un débutant, mais tout les parseurs que j'ai récupere sont bien trop complexe pour moi.
 
 :hello:  
 

Reply

Marsh Posté le 19-12-2006 à 20:23:05   

Reply

Marsh Posté le 19-12-2006 à 23:45:44    

fait avec simplexml tu verras c'est encore plus simple

Reply

Marsh Posté le 20-12-2006 à 08:30:19    

pluzun.. simplexml est vraiment bien sympathique.. ;)

Reply

Marsh Posté le 20-12-2006 à 15:49:16    

impossible, le serveur est en PHP Version 4.3.8 et simplexml est disponible que en PHP5
 
aparement il faut que j'utilise la fonction xml_parse_into_struct() ...

Reply

Marsh Posté le 20-12-2006 à 15:55:52    

Et tu es obligé d'utilise du XML ? Y'a d'autre format comme ini ou bien YAML... Voir même du PHP directement avec des array (suffit de bien présenté pour que ca soit clair, mais ca peut pas être moins clair que du XML)

Reply

Marsh Posté le 20-12-2006 à 15:58:41    

arf en effet, pas de bol.

Reply

Marsh Posté le 20-12-2006 à 16:00:42    

ben, le but est de remplir ma BD a partir d'un flux rss !

Reply

Marsh Posté le 20-12-2006 à 16:08:51    

arf, forcément... la, t'es bloqué

Reply

Marsh Posté le 20-12-2006 à 16:10:37    

il y a des lib rss déjà faites sinon comme magpie rss

Reply

Marsh Posté le 20-12-2006 à 16:14:22    

bon, j'avance, j'avais pas encore regardé la suite de mon cour ^^
 

Code :
  1. // lecture du document dans la variable $xml
  2. $xml="";
  3. $fic=fopen("Test_parse.aspx", "r" );
  4. while($don=fread($fic,256))$xml.=$don;
  5. fclose($fic);
  6. // Analyse du document, XML, résultat dans les tableaux $valeurs et $index
  7. $parseur=xml_parser_create();
  8. xml_parse_into_struct($parseur,$xml,$valeurs,$index);
  9. xml_parser_free($parseur);
  10. ?>


 
une boucle devrait me permettre de récuperer les infos souhaitées qui sont dans $valeurs
 

Reply

Marsh Posté le 20-12-2006 à 16:14:22   

Reply

Marsh Posté le 20-12-2006 à 16:17:38    

Je@nb a écrit :

il y a des lib rss déjà faites sinon comme magpie rss


 
non je veux faire mon propre parseur, j'ai un site web à faire avec un dossier a rendre dans le cadre de mes cours, c'est important que ce soit moi qui ai travaillé et compris ce que j'ai fais et que je sois capable de l'expliquer dans le dossier.

Reply

Marsh Posté le 20-12-2006 à 16:30:07    

Ah, et le fait que tu aies appris a ne pas reinventer la roue, ca ne rapporte pas quelque points? :heink:


Message édité par gizmo le 20-12-2006 à 16:30:24
Reply

Marsh Posté le 20-12-2006 à 17:01:11    

rien à voir,on à des cours, on doit être capable de les apprendre, de les comprendre et de les appliquer
 
sinon 95% des cours serais completement inutile, autant faire un skyblog et dire, oui je sais faire un site web !

Reply

Marsh Posté le 20-12-2006 à 17:02:59    

ok, encore un qui n'a rien compris au developpement.

Reply

Marsh Posté le 20-12-2006 à 17:52:59    

Sauf que ton truc de parsage xml c'est vraiment de la préhistoire.
Pareil pour ta lecture de fichier où tu fais en moins bien ce que fait file_get_contents en une ligne

Reply

Marsh Posté le 20-12-2006 à 18:08:08    

gizmo a écrit :

ok, encore un qui n'a rien compris au developpement.


ben developpe ...
 

Je@nb a écrit :

Sauf que ton truc de parsage xml c'est vraiment de la préhistoire.
Pareil pour ta lecture de fichier où tu fais en moins bien ce que fait file_get_contents en une ligne


 
c'est pas bien important, j'aimerais bien terminer ec truc rapidement, j'arrive maintenant a affciher tout ce qu'il ya dans $valeurs
mais j'arrive pas à tester ces elements
 
par exemple je veux afficher que les tag TITLE et afficher son contenu :
 

Code :
  1. echo "<table><th>tags</th><th>value</th></tr>\n";
  2. for ($i=0; $i<count($valeurs); $i++) {
  3.  if ($valeurs[$i]["tag"]="TITLE" ) {
  4.    echo "<tr>
  5.     <td>".$valeurs[$i]["tag"]."</td>
  6.     <td>".$valeurs[$i]["value"]."</td></tr>\n";
  7.     }
  8. }
  9. echo "<table>\n";


 
ya un truc qui pas dans ce code ?

Reply

Marsh Posté le 20-12-2006 à 21:30:38    

gizmo a écrit :

ok, encore un qui n'a rien compris au developpement.


 
Le principe de réutilisation est bon, surtout dans le cadre professionel, mais dans le cadre de l'apprentissage ça ne s'applique pas, le but de ce qu'il fait (enfin je suppose) est d'apprendre à faire du php, pas de faire un parseur de RSS, le parseur de RSS n'est qu'un moyen, un support.
Tout comme les rédactions à l'école servent à apprendre à écrire et à bien écrire, ce dont tu parle le prof, le correcteur ou qui que ce soit d'autre s'en contrefout totalement. _Ensuite_ quand tu saura écrire/programmer, et que tu aura un but, un produit à créer, et que la programmation ne sera qu'un moyen d'y arriver, la réutilisation s'applique.


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 22-12-2006 à 11:06:31    

mreci 0x90, faut pas confondre le travail et les étude, les profs contrairement à un client (enfin les notres) ne jugent pas sur le résultat final du site, mais bien sur le travail effectué
alors permet moi de te répondre : ok, encore un qui a rien compris aux études
 
sinon, j'ai quand même fini pas trouvé ma grosse erreur que tellement elle grosse personne ne l'a vue : '==' et pas '=' pour comparer
 
 
Voici donc quand même mon code final pour ceux que ca interesse
 

Code :
  1. $xml="";
  2. $fic=fopen("http://www.bourse-academie.com/rsscac40.aspx", "r" );
  3. while($don=fread($fic,256))$xml.=$don;
  4. fclose($fic);
  5. $parseur=xml_parser_create();
  6. xml_parse_into_struct($parseur,$xml,$valeurs,$index);
  7. xml_parser_free($parseur);
  8.   for ($i=10; $i<count($valeurs); $i++) {
  9.    if ($valeurs[$i]["tag"]=="TITLE" ) {$titre=$valeurs[$i]["value"];}
  10.    if ($valeurs[$i]["tag"]=="LINK" ) {$link=$valeurs[$i]["value"];}
  11.    if ($valeurs[$i]["tag"]=="DESCRIPTION" ) {$desc=$valeurs[$i]["value"];
  12.     $desc = str_replace(",",".",$desc);
  13.     $desc=number_format($desc, 3, '.', ' ');
  14.     f_maj_tab_action($titre,$link,$desc);}
  15.   }


 
 
 :hello:


Message édité par fusion_sadam le 22-12-2006 à 11:07:00
Reply

Marsh Posté le 22-12-2006 à 13:44:06    

Desole, mais moi, dans mes etudes, on m'a appris deux choses qui continuent de me servir tous les jours:
 
- Etre le plus feneant possible.
- Use the right tool to do the right job.
 
Dans ce cas-ci, tu bafoues ces deux regles, donc bon...

Reply

Marsh Posté le 22-12-2006 à 14:20:58    

gizmo a écrit :

Desole, mais moi, dans mes etudes, on m'a appris deux choses qui continuent de me servir tous les jours:
 
- Etre le plus feneant possible.
- Use the right tool to do the right job.
 
Dans ce cas-ci, tu bafoues ces deux regles, donc bon...


 
pluzun...
 
si les profs ont envis de se faire le joli petit parseur laisse les faire, mais je ne pense pas que ton prof t'ais demandé de te taper un parseur à faire... si ?
sinon, il t'aura demandé de réaliser une fonction avec ton code, donc, afin de réaliser cette fonction libre à toi d'utiliser des bibliothéques déjà existante.
 
Le but de l'école n'est pas forcément de t'apprendre à réinventer la roue, mais plus de savoir ou chercher les infos qui te seront nécessaire pour mener à bien tes projets.. (enfin moi je vois les choses sous cet angle..)

Reply

Marsh Posté le 22-12-2006 à 15:27:30    

Je@nb a écrit :

Sauf que ton truc de parsage xml c'est vraiment de la préhistoire.


Pas exactement en fait, créer un parser XML correct et de qualité est hautement non trivial, la norme XML étant extrèmement complexe.
 
Surtout quand tu commences à te lancer dans des parsers validants, à gérer les doctypes et autre schémas, etc...
 
Par exemple ElementTree (considérée comme la meilleure lib de parsing XML actuelle en Python, sachant que c'est uniquement un parser/Serialise, pas de gestion de XPATH, XSL ou autres joyeusetés) fait un bon 1100 lignes de code Python, et la réimplémentation en C (pour gagner en vitesse quand nécessaire) représente 13kloc de C et 200 lignes de Python... sans compter le code d'Expat sur lequel cElementTree est basée.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 25-12-2006 à 14:46:39    

masklinn a écrit :

Pas exactement en fait, créer un parser XML correct et de qualité est hautement non trivial, la norme XML étant extrèmement complexe.

 

Surtout quand tu commences à te lancer dans des parsers validants, à gérer les doctypes et autre schémas, etc...

 

Par exemple ElementTree (considérée comme la meilleure lib de parsing XML actuelle en Python, sachant que c'est uniquement un parser/Serialise, pas de gestion de XPATH, XSL ou autres joyeusetés) fait un bon 1100 lignes de code Python, et la réimplémentation en C (pour gagner en vitesse quand nécessaire) représente 13kloc de C et 200 lignes de Python... sans compter le code d'Expat sur lequel cElementTree est basée.

 


 


Autant la fermer que de sortir des conneries comme ça. N'importe quel abruti peut faire une recherche google et sortir les memes infos.  :fou:

  

Liens intéressant:

 

-http://magpierss.sourceforge.net/
-http://sourceforge.net/projects/snoopy/
-http://www.regular-expressions.info/

  



Message édité par supermofo le 25-12-2006 à 14:58:45
Reply

Marsh Posté le 26-12-2006 à 09:13:20    

on nage en plein délire.
 
-> http://pear.php.net/package/XML_RSS

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed