Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1771 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] - traitement d'un fichier XML [marche presque] cry

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] - traitement d'un fichier XML [marche presque] cry

n°478024
bl@p_psx
Admin G15-france
Posté le 05-08-2003 à 14:08:22  profilanswer
 

Voilà, j'explique :
 
Je cherche a faire un listing des membres d'un Outfit ( clan de PlanetSide, la team HFR ), et ceci a l'aide des fonction de lecture de fichier du PHP.
Le fichier a lire est un fichier XML, et en fait, je ne veux pas utiliser de parser, juste rechercher quelques infos dans ce fichier.
 
J'arrive dejà a recuperer ( dans un aute XML ) les informations de chaque joueurs, mais le probleme avec la team, c'est que le fichier XML contient plusieur fois le meme champ <charid>xxxxx</charid>.
 
pour les stats d'un joueur, les champs sont unique, donc je fait ca :
 

Code :
  1. $fp = fopen("http://stats.planetsidegaming.com/21/".$num."/stats2.xml","r" ); //lecture du fichier
  2. while (!feof($fp)) { //on parcoure toutes les lignes
  3.   $page .= fgets($fp, 4096); // lecture du contenu de la ligne
  4. }
  5. $num1 = eregi("<charid>(.*)</charid>",$page,$num); //on isole le nom
  6. ainsi de suite pour les autres champs ...


 
je voudrais donc trouver un moyen de parcourir le fichier XML ( http://stats.planetsidegaming.com/ [...] /stats.xml ) et recuperer tout les contenus des champs <charid>xxxx</charid> dans un tableau afin de faire un listing ...
 
merci bien d'avance ...
 
@+
 
ps: mon code n'es pas tres propre, mais ca marche, merci de ne pas m'en tenir trop rigueur


Message édité par bl@p_psx le 05-08-2003 à 17:10:02
mood
Publicité
Posté le 05-08-2003 à 14:08:22  profilanswer
 

n°478028
bl@p_psx
Admin G15-france
Posté le 05-08-2003 à 14:16:06  profilanswer
 

en fait, si je trouve le moyen de parser l'XML pour ne sortir que les <charid> et les <name>, ca serais pas mal aussi ... le probleme, c'est que je n'ai aucune motion d'XML, et que je suis pas douer en traitement de chaine ( les seules chose que je faisais en php jusque là etait de l'insertion BD et lecture BD ..., rien de bien mechant )
 
@+

n°478035
anapajari
s/travail/glanding on hfr/gs;
Posté le 05-08-2003 à 14:23:32  profilanswer
 

t'as des fonctions toutes faites:
http://dev.nexen.net/docs/php/anno [...] p?lien=xml
 
mais si tu veux vraiment t'amuser je te conseillerais d'essayer avec domxml_xmltree()... c'est ... instructif :)

n°478041
bl@p_psx
Admin G15-france
Posté le 05-08-2003 à 14:29:55  profilanswer
 

Anapajari a écrit :

t'as des fonctions toutes faites:
http://dev.nexen.net/docs/php/anno [...] p?lien=xml
 
mais si tu veux vraiment t'amuser je te conseillerais d'essayer avec domxml_xmltree()... c'est ... instructif :)


 
ca a l'air pas mal du tout ( surtout la fin ) mais je n'y comprend pas grand chose ...
je fait quelques tests en me basant sur ca :
 

Code :
  1. <?php
  2. class AminoAcid {
  3.     var $name;  // nom aa  
  4.     var $symbol;    // symbole à trois lettres  
  5.     var $code;  // code à une lettre  
  6.     var $type;  // hydrophobique, chargé ou neutre  
  7.    
  8.     function AminoAcid ($aa) {
  9.         foreach ($aa as $k=>$v)
  10.             $this->$k = $aa[$k];
  11.     }
  12. }
  13. function readDatabase($filename) {
  14.     // read the xml database of aminoacids  
  15.     $data = implode("",file($filename));
  16.     $parser = xml_parser_create();
  17.     xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
  18.     xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
  19.     xml_parse_into_struct($parser,$data,$values,$tags);
  20.     xml_parser_free($parser);
  21.     // loop through the structures  
  22.     foreach ($tags as $key=>$val) {
  23.         if ($key == "molecule" ) {
  24.             $molranges = $val;
  25.             // each contiguous pair of array entries are the   
  26.             // lower and upper range for each molecule definition  
  27.             for ($i=0; $i < count($molranges); $i+=2) {
  28.                     $offset = $molranges[$i] + 1;
  29.                 $len = $molranges[$i + 1] - $offset;
  30.                 $tdb[] = parseMol(array_slice($values, $offset, $len));
  31.             }
  32.         } else {
  33.             continue;
  34.         }
  35.     }
  36.     return $tdb;
  37. }
  38. function parseMol($mvalues) {
  39.     for ($i=0; $i < count($mvalues); $i++)
  40.         $mol[$mvalues[$i]["tag"]] = $mvalues[$i]["value"];
  41.     return new AminoAcid($mol);
  42. }
  43. $db = readDatabase("moldb.xml" );
  44. echo "** Base d'objets AminoAcid :\n";
  45. print_r($db);
  46. ?>


Message édité par bl@p_psx le 05-08-2003 à 14:33:21
n°478064
anapajari
s/travail/glanding on hfr/gs;
Posté le 05-08-2003 à 14:44:03  profilanswer
 

BL@P_pSx a écrit :


 
ca a l'air pas mal du tout ( surtout la fin ) mais je n'y comprend pas grand chose ...
je fait quelques tests en me basant sur ca :
...


 :non: tu as recopié l'exemple de la doc mot pour mot et tu t'es dis je vais bien réussir à l'arranger à ma sauce.  
As-tu vraiment besoin d'avoir un tableau d'objet? Est-ce que tu as essayé juste avec les tableaux de valeurs et d'index si tu t'en sortais pas?
Si oui soit plus précis sur ce que tu comprends pas!

n°478065
simogeo
j'ai jamais tué de chats, ...
Posté le 05-08-2003 à 14:44:07  profilanswer
 

drapal de fucker  [:risboc]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
n°478080
bl@p_psx
Admin G15-france
Posté le 05-08-2003 à 14:48:23  profilanswer
 

Anapajari a écrit :


 :non: tu as recopié l'exemple de la doc mot pour mot et tu t'es dis je vais bien réussir à l'arranger à ma sauce.  
As-tu vraiment besoin d'avoir un tableau d'objet? Est-ce que tu as essayé juste avec les tableaux de valeurs et d'index si tu t'en sortais pas?
Si oui soit plus précis sur ce que tu comprends pas!


 
j'ai meme pas commencer a ecrire koi que ce soit !!!
 
je suis en train de faire quelques test ( j'ai bien dis, en train de faire ) et oui, a la 1ere lecture de la sources, j'ai pas telement compris ... mais bon, j'ai pas fait un bete copier coller, ne serais-ce que pour ouvrir mon fichier distant, ...
 
j'ai dejà trouver pas mal de sujet sur le net sur les parser, et je ne comprend pas bien le principe, mais j'y travaille !!!
 
@+

n°478099
anapajari
s/travail/glanding on hfr/gs;
Posté le 05-08-2003 à 14:57:58  profilanswer
 

mille pardon alors  :jap:  
Mais plutot que de commencer par les parsers moi je te conseillerais de plutot commencer par étudier le xml, c'est beaucoup plus facile de comprendre comment se servir d'un parser après. D'ailleurs si tu captes l'anglais les tutoriaux W3schools sur le xml sont pas mal du tout!

n°478122
bl@p_psx
Admin G15-france
Posté le 05-08-2003 à 15:05:22  profilanswer
 

Anapajari a écrit :

mille pardon alors  :jap:  
Mais plutot que de commencer par les parsers moi je te conseillerais de plutot commencer par étudier le xml, c'est beaucoup plus facile de comprendre comment se servir d'un parser après. D'ailleurs si tu captes l'anglais les tutoriaux W3schools sur le xml sont pas mal du tout!


 
je le ferais bien, mais pas vraiment de temps, et en fait, je le ferais surement plus tard ...  
 
Je voulais, a la base, me passer de parser, et taper dans du txt, j'ai reussi pour les joueurs ( code pas tres propre, certe ) mais j'arrive pas a dresser cette liste !!
 
exemple :  
recup des infos du joueurs en fonction de sont num = http://www.blap.net/planetside/joueur.php?num=357045
 
il faut juste que j'arrive a faire un listing des joueurs ( le fichier XML citer plus haut contient tout ce qu'il faut, sauf qu'avec ma methode, il ne lis pas les balises identique )
 
http://stats.planetsidegaming.com/ [...] /stats.xml
 
@+
 
edit : un autre menbres, a reussi a le faire en javascript, mais il utilise des activeX qui font que ces pages ne sont pas autoriser a etre executer sur les serveurWeb ( sauf chez toi avec IIS, ne marche pas avec OVH, ni Free )


Message édité par bl@p_psx le 05-08-2003 à 15:07:48
n°478175
bl@p_psx
Admin G15-france
Posté le 05-08-2003 à 15:18:29  profilanswer
 

c'est koi la meilleur solution ?
 
enfin, pas la meilleur, mais la plus pratique pour moi ?
 
celle qui me permet de faire un listing simple ( nom du joueur qui pointe vers sa fiche ) il faut donc que je recupere les balise <charid> et <nom> a chaque fois, et ensuite que je concatenne pour faire un lien ( ca devrais aller cette partie ). d'ailleur, je me demande comment lister le tableau ( surement avec un while )
 
@+

mood
Publicité
Posté le 05-08-2003 à 15:18:29  profilanswer
 

n°478232
bl@p_psx
Admin G15-france
Posté le 05-08-2003 à 15:43:00  profilanswer
 

bon, maintenant, j'ai reussi ( apres avoir essayer pas mal de truc different, et avoir enfin compris l'utilisation de la fonction citer plus haut ) j'ai un beau tableau de la forme :
 

Code :
  1. Array
  2. (
  3.     [0] => character
  4.         (
  5.             [charid] => 341909
  6.             [name] => Denead
  7.             [battlerank] => 11
  8.             [points] => 827
  9.             [title] => Trial
  10.             [lastloggedin] => July 18, 2003
  11.         )
  12.     [1] => character
  13.         (
  14.             [charid] => 316023
  15.             [name] => kalydess
  16.             [battlerank] => 7
  17.             [points] => 7
  18.             [title] => Trial
  19.             [lastloggedin] => June 20, 2003
  20.         )
  21. [...]


 
j'aimerais faire une liste, mais je suis vraiment pas douer ... si quelq'un peux m'eclairer ( pas me donner un truc tout cuit, ca m'aiderais pas )
 
je pense faire un truc du genre :
 

Code :
  1. while ($liste != 100) {
  2. echo $liste[x][nom].'<br>';
  3. echo $liste[x][charid].'<br>';
  4. echo $liste[x][battlerank].'<br>';
  5. echo $liste[x][title].'<br>';
  6. }


 
mais je sais pas comment faire varier le [x] ??


Message édité par bl@p_psx le 05-08-2003 à 15:43:29
n°478253
Je@nb
Kindly give dime
Posté le 05-08-2003 à 15:55:57  profilanswer
 

Code :
  1. x = 0;
  2. while (x != 100) {
  3. echo $liste[x][nom].'<br>';
  4. echo $liste[x][charid].'<br>';
  5. echo $liste[x][battlerank].'<br>';
  6. echo $liste[x][title].'<br>';
  7. x++;
  8. }

n°478272
anapajari
s/travail/glanding on hfr/gs;
Posté le 05-08-2003 à 16:06:19  profilanswer
 

on va plutot apprendre à faire les choses proprement, quelque chose dans le genre:

Code :
  1. foreach($nomdetontableau as $key=>$val)
  2. {
  3.      ...
  4. }


A ce moment la dans chacune des itérations dans $key tu arraus l'indice et dans $val le tableau des valeurs.
Ainsi par exemple si tu veux afficher les données ça fait:

Code :
  1. foreach($nomdetontableau as $key=>$val)
  2. {
  3.      print "$val[nom]<br />$val[charid]<br />$val[battlerank]<br />$val[title]<br />";
  4. }


Ce qui est quand même plus clair ( à mon sens ) .

n°478291
bl@p_psx
Admin G15-france
Posté le 05-08-2003 à 16:17:34  profilanswer
 

merci a vous 2 ! je connaisais pas le foreach ... :sarcastic:  
 
sinon, Je@nb, manque les "$" mais ca doit marcher aussi ...
 
je vous tient au courant de l'avancement ...
 
merci encore !
 
@+

n°478332
bl@p_psx
Admin G15-france
Posté le 05-08-2003 à 16:32:10  profilanswer
 

ca marche pas ...
 
meme un echo

Code :
  1. $liste[1][nom]

ne marche pas  :cry:  :cry:  
 
pourtant quand je fait :
 

Code :
  1. print_r($liste)


j'ai ca :

Code :
  1. Array
  2. (
  3.     [0] => character Object
  4.         (
  5.             [charid] => 341909
  6.             [name] => Denead
  7.             [battlerank] => 11
  8.             [points] => 827
  9.             [title] => Trial
  10.             [lastloggedin] => July 18, 2003
  11.         )
  12.     [1] => character Object
  13.         (
  14.             [charid] => 316023
  15.             [name] => kalydess
  16.             [battlerank] => 7
  17.             [points] => 7
  18.             [title] => Trial
  19.             [lastloggedin] => June 20, 2003
  20.         )
  21.     [2] => character Object
  22.         (
  23.             [charid] => 337733 [......]


 
je comprend pas ...

n°478365
anapajari
s/travail/glanding on hfr/gs;
Posté le 05-08-2003 à 16:42:05  profilanswer
 

il marche pas le foreach?
vas-y montre tout ton code!

n°478379
bl@p_psx
Admin G15-france
Posté le 05-08-2003 à 16:46:36  profilanswer
 

Code :
  1. $liste = readDatabase("http://stats.planetsidegaming.com/outfits/21/6573/stats.xml" );
  2. foreach($liste as $key=>$val)
  3.    {
  4.          print "$val[nom]<br>$val[charid]<br>$val[battlerank]<br>$val[title]<br>";
  5.    }
  6. print_r($liste);
  7. ?>


 
la fonction readDatabase est dejà definie ci-dessus, en dehors des modifs de commentaires et autre nom de variable ...
 
j'obtient une succession de <br><br><br><br> ....
 
merci ...
ps: j'ai enlever le "/" parcequ'il le rajoutais dans les balise <br> et que c'etait un peu emettant.


Message édité par bl@p_psx le 05-08-2003 à 16:47:55
n°478425
anapajari
s/travail/glanding on hfr/gs;
Posté le 05-08-2003 à 17:10:59  profilanswer
 

raaaah bin evidemment ça peut pas marcher si tu te sers des fonctions qu'il y avait dans nexen. A ce moment la $liste n'est pas un tableau de tableau mais un tableau d'objet.
Il s'avère que print_r s'en sort because

Citation :

][nom]la doc php a dit[/nom]print_r affiche des informations à propos d'une variable, de manière à ce qu'elle soit lisible. Pour une chaîne, un entier ou un double, la valeur sera elle même sera affichée. Pour les tableaux, les valeurs seront présentées dans un format qui montre les clés et les valeurs. Une notation similaire est disponible pour les objets.


Donc dans ton cas il faut faire un truc dans le genre:

Code :
  1. for( $i=0; $i<count($liste); $i++)
  2.   {
  3.              $arr = get_object_vars($liste[$i]);
  4.              while (list($prop, $val) = each($arr))
  5.              {
  6.                      echo "\t$prop = $val\n<br />";
  7.              }
  8.   }


Petite question au passage t'as changé la structure de l'objet AminoAcide ou même pas?
 
ps: pour le / dans le br c'était fait exprès enfin bon fait comme tu veux!

n°478431
bl@p_psx
Admin G15-france
Posté le 05-08-2003 à 17:16:42  profilanswer
 

ok, je vais essayer ton truc ... je savais meme pas la diff entre tableau de tableau et tableau d'objet ...
 
pour la structure de AminoAcide ( character chez moi ), j'ai pas changer trop vu que j'ai egalement 4 valeur a recuperer ...
 
@+

n°478435
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 05-08-2003 à 17:18:52  profilanswer
 

BL@P_pSx a écrit :


meme un echo

Code :
  1. $liste[1][nom]

ne marche pas  :cry:  :cry:  
[...]
    [1] => character Object
        (
            [charid] => 316023
            [name] => kalydess


Et la différence [name]/[nom] ça t'est pas venu à l'esprit ? :ange:


Message édité par Taiche le 05-08-2003 à 17:19:48

---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°478437
bl@p_psx
Admin G15-france
Posté le 05-08-2003 à 17:20:20  profilanswer
 

Taiche a écrit :


Et la différence [name]/[nom] ça t'est pas venu à l'esprit ? :ange:


 
sorry, mais j'ai aussi essayer avec charid et battlerank ...

n°478452
bl@p_psx
Admin G15-france
Posté le 05-08-2003 à 17:41:21  profilanswer
 

Code :
  1. for( $i=0; $i<count($liste); $i++)
  2.     {
  3.                  $arr = get_object_vars($liste[$i]);
  4.                  while (list($prop, $val) = each($arr))
  5.                  {
  6.                            echo "\t$prop = $val\n<br />";
  7.                  }
  8.     }


 
ca marche, mais c'est pas pratique pour la mise en forme ... je vais quand meme essayer ...
 
je doit faire un truc du genre :
 

Code :
  1. echo '<a href ="http://www.blap.net/planetside/joueur.php?num=$charid">".$name."</a>';


 
avec peut etre des infos en plus ( afficher le battlerank et les pts, mais, c'est surtout la liste avec l'url qui me pose pb ...
 
ya pas moyen de transformer un tableau d'objet en tableau de tableau ??

n°478469
Taz
bisounours-codeur
Posté le 05-08-2003 à 17:52:02  profilanswer
 

http://amg.sytes.net/panneaux/pano79689.png

n°478474
bl@p_psx
Admin G15-france
Posté le 05-08-2003 à 17:53:51  profilanswer
 


 
je sais meme pas ce que c'est que feof ...

n°478476
anapajari
s/travail/glanding on hfr/gs;
Posté le 05-08-2003 à 17:54:21  profilanswer
 

Anapajari a écrit :


 :non: tu as recopié l'exemple de la doc mot pour mot et tu t'es dis je vais bien réussir à l'arranger à ma sauce.  
As-tu vraiment besoin d'avoir un tableau d'objet? Est-ce que tu as essayé juste avec les tableaux de valeurs et d'index si tu t'en sortais pas?


tsss t'es vraiment un feignant, t'as même pas chercher à comprendre ce que remontait xml_parse_into_struct ( des tableaux de tableaux) et tu cherches mêmes pas a comprendre comment marche les objets en php( http://www.commentcamarche.net/php/phpclass.php3 ).
 
Bref tiens ça doti faire ce que tu veux, t'aurras plus qu'a recopier:

Code :
  1. for( $i=0; $i<count($liste); $i++) 
  2.    { 
  3.                 $myObj = $liste[$i];
  4.                 echo '<a href ="http://www.blap.net/planetside/joueur.php?num='.$myObj->charid.'>'.$myObj->name.'"</a>';
  5.    }

 

n°478495
bl@p_psx
Admin G15-france
Posté le 05-08-2003 à 18:07:12  profilanswer
 

je suis ce que tu apelle un feignant, et depuis ce matin, j'ai lu une bonne centaine de page sur le XML et sur le traitement de chaine en PHP, alors, j'ai peut-etre oublier de potasser les objet ( je sais meme pas ce que c'est ) ... maintenant, si tu me dis comment ca marche plutot que de dire que je fait rien ... ca me ferais avancer ...
J'ai compris ( c'est un grand mot ) ce que faisais le scirpt de nexen, mais de la a dire que j'ai compris la programation orienter objet ... :sarcastic:  :o  
Alors, je potasse et encore desoler d'etre un newb en php, j'ai surement d'autre domaine que je maitrise plus.
 
 :hello: et merci !
 
edit: je vient de lire ca : http://www.commentcamarche.net/php/phpclass.php3 et je comprend pas grand chose, mais ca vas venir ...


Message édité par bl@p_psx le 05-08-2003 à 18:08:24
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] - traitement d'un fichier XML [marche presque] cry

 

Sujets relatifs
PHP, socket & telnet... se logger sur un serveur distant [SOLVED][Javascript easy] J'arrive pas a trouver pkoi ca marche pas....
[PHP] Tracer des graphiques, quelles librairies ?[PHP] Question sur les Header
[PHP] Un regex simple et un truc plus dur...lister les bases et les tables sur SQL serveur via PHP
[XSL] Remplacement d'attributs dans un fichier ?[JAVA XML] Une JSP bien formée
Créer un lien dans XSL en fonction de données dans XMLRemplacer une ligne dans un fichier
Plus de sujets relatifs à : [PHP] - traitement d'un fichier XML [marche presque] cry


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR