Parser un fichier XML

Parser un fichier XML - PHP - Programmation

Marsh Posté le 05-10-2004 à 09:12:59    

Bonjour,
 
je souhaiterais parser un fichier XML avec PHP. Mais je ne veux pas utiliser le parser de PHP, ni une librairie quelconque. Pourquoi ? Parce que : http://php.weblogs.com/2004/02/11#a3290.
 
Je veux donc partir du côté des expressions régulières... J'ai passé un bon moment hier à chercher entre les fonctions preg_match_all, spliti et eregi, mais je n'y parviens pas...
 
Voici le début de mon code :

Code :
  1. <?php
  2. $file = "donnees.xml" ;
  3. if (!($fp=fopen($file, "r" ))) {
  4. die ("Impossible de lire le fichier XML" );
  5. }
  6. $data=fread($fp,filesize($file));
  7. fclose($fp);
  8. ?>


 
Si quelqu'un peut m'apporter un peu d'aide, ça serait sympa...  :sweat:  


---------------
Matt
Reply

Marsh Posté le 05-10-2004 à 09:12:59   

Reply

Marsh Posté le 05-10-2004 à 10:04:34    

En fait, j'arrive pas à utiliser ces fonctions...
Exemple de fichier XML :  

<balise>
  <coucou>
    <nom>Jean</nom>
  </coucou>
  <coucou>
    <nom>Pierre</nom>
  </coucou>
</balise>


 
Je voudrais séparer les <coucou>...</coucou> à chaque fois (que ca me retourne ça dans un tableau ou sous forme d'objet, c'est égal...)


Message édité par SatanKoRn le 05-10-2004 à 10:05:45

---------------
Matt
Reply

Marsh Posté le 07-10-2004 à 13:20:27    

au cas où ça intéresserait quelqu'un :

Code :
  1. $data = substr($data, 8);
  2. // enlever le <balise>
  3. $data = substr($data, 0, -9);
  4. // enlever le </balise>
  5. preg_match_all("|<coucou>(.*)</coucou>|U", "$data", $out);
  6. // $out[0][0] renvoie : <coucou><nom>Jean></nom></coucou>
  7. // $out[0][1] renvoie : <coucou><nom>Pierre</nom></coucou>
  8. // et
  9. // $out[1][0] renvoie : <nom>Jean</nom>
  10. // $out[1][1] renvoie : <nom>Pierre</nom>


Merci quand même  ;)


Message édité par SatanKoRn le 07-10-2004 à 13:22:19

---------------
Matt
Reply

Marsh Posté le 07-10-2004 à 16:10:54    

Commence par regarder si les extensions XML sont activees sur ton hebergement (renseigne toi aupres de ton hebergeur ou utilise la fonction phpinfo()).
 
Il existe des fonctions de traitement du XML qui permettent d'acceder a des documents xml, a savoir : xml-rpc, dom-xml, etc.
 
http://fr2.php.net/manual/fr/ref.domxml.php
http://fr2.php.net/manual/fr/ref.xml.php
http://fr2.php.net/manual/fr/ref.xmlrpc.php
 
 
Essayer de le refaire a la main n'est pas une bonne solution : ca a toutes les chances d'etre plus long a faire et d'etre moins performant (ou moins flexible).

Reply

Marsh Posté le 07-10-2004 à 16:13:14    

Justement, j'ai lu que c'était plus rapide avec les expressions régulières, mais bon, ça galère pas mal, alors j'aurai peut-être pas le choix...
Pour l'instant, je suis sur mon propre PC, donc les extensions XML sont activées, merci! :)


---------------
Matt
Reply

Marsh Posté le 07-10-2004 à 17:54:52    

Te base pas que sur ce test. Ça à l'air un peu bancal.
 
regex et explode vont plus vite car ce n'est pas du "vrai" parse. Les autres te détecte toutes les balises et vérifie la conformité xml. D'ailleurs, si ça se peut, ce qui est le plus lent c'est quand les librairies appellent tes fonctions php de traitement.  
Il aurait fallu tester sur de gros fichier pour voir ce qui se passe (surtout avec explode)
 
De toute façon, même si le test est vrai et que tu as à traité que disons 3 petits fichiers, ça va mettre:
- regex : 0,00015 s
- sax (le plus lent dans le test):   0,01512 s
 
Tu verras vraiment la différence ?

Reply

Marsh Posté le 07-10-2004 à 19:20:32    

pascal_ a écrit :

Te base pas que sur ce test. Ça à l'air un peu bancal.
 
regex et explode vont plus vite car ce n'est pas du "vrai" parse. Les autres te détecte toutes les balises et vérifie la conformité xml. D'ailleurs, si ça se peut, ce qui est le plus lent c'est quand les librairies appellent tes fonctions php de traitement.  
Il aurait fallu tester sur de gros fichier pour voir ce qui se passe (surtout avec explode)
 
De toute façon, même si le test est vrai et que tu as à traité que disons 3 petits fichiers, ça va mettre:
- regex : 0,00015 s
- sax (le plus lent dans le test):   0,01512 s
 
Tu verras vraiment la différence ?


très bonne remarque...  :jap:  
aurais-tu un parseur à me proposer alors ? à part ceux qui sont intégrés à PHP si possible  :D  


---------------
Matt
Reply

Marsh Posté le 07-10-2004 à 19:23:18    

me suis toujours dit qu'il me faudrait mon parser perso pour mes fichier perso

Reply

Marsh Posté le 07-10-2004 à 19:39:34    

SatanKoRn a écrit :

très bonne remarque...  :jap:  
aurais-tu un parseur à me proposer alors ? à part ceux qui sont intégrés à PHP si possible  :D


 
Ben non  :whistle:  
 
Pourquoi tu ne veux pas utiliser ceux intégrés à PHP ?


Message édité par pascal_ le 07-10-2004 à 19:40:34
Reply

Marsh Posté le 07-10-2004 à 20:03:08    

chacal_one333 : bon courage :D
 
pascal_ : parce qu'il est en mode expérimental, non ?


---------------
Matt
Reply

Marsh Posté le 07-10-2004 à 20:03:08   

Reply

Marsh Posté le 13-10-2004 à 18:50:18    

Comment parser un fichier xml en langage C

Reply

Marsh Posté le 14-10-2004 à 13:44:23    

quel rapport avec le PHP ?


---------------
Matt
Reply

Marsh Posté le 16-10-2004 à 09:07:33    

pascal_ a écrit :

Ben non  :whistle:  
 
Pourquoi tu ne veux pas utiliser ceux intégrés à PHP ?


Parce que si l'hebergeur qu'il préfère ne propose pas l'extension ben il risque d'être marron mais bon , ça m'étonnerais qu'un hebergeur n'ait pas compilé les différentes extention pour traiter le xml.

Reply

Marsh Posté le 16-10-2004 à 21:28:31    

gchauvel a écrit :

Comment parser un fichier xml en langage C


http://www.xmlsoft.org/

Reply

Sujets relatifs:

Leave a Replay

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