Php et parser xml

Php et parser xml - PHP - Programmation

Marsh Posté le 09-09-2005 à 14:08:02    

Bonjour, voici le code que j'utilise pour parser un flux xml :

Code :
  1. <? function parser(){
  2. $url = "h***************************xml.php";
  3. $donnees="";
  4. $rawitems="";
  5. $fichier_xml = $url;
  6. $nombre_limite = 10;
  7. $file = fopen($fichier_xml,"r" );
  8. if($file){
  9.  $raw = fread($file,32000);
  10.  fclose($file);
  11.  if(eregi("<item>(.*)</item>",$raw,$rawitems)){
  12.   $items = explode("<item>", $rawitems[0]);
  13.   $nb = count($items);
  14.   $maximum = (($nb-1) < $nombre_limite) ? ($nb-1) : $nombre_limite;
  15.   for ($i=0;$i<$maximum;$i++){
  16.    eregi("<id>(.*)</id>",$items[$i+1], $id);
  17.    eregi("<nom_video>(.*)</nom_video>",$items[$i+1], $nom_video);
  18.    eregi("<scene>(.*)</scene>",$items[$i+1], $scene);
  19.    eregi("<date>(.*)</date>",$items[$i+1], $date);
  20.    $donnees=$donnees."Id : ".$id[1].", Nom : ".$petite_description[1]."<br />";
  21.   }
  22.  }
  23. }
  24. $fichier="./inc.php";
  25. $file= fopen($fichier, "w" );
  26. fwrite($file, $donnees);
  27. fclose($file);
  28. }
  29. parser();


 
Le xml est valide, mais je n'ai que deux résultats d'affichés. Si j'enleve le nombre maximal d'elements affichés, j'ai tous les elements, mais avec les valeurs du 2eme :
1 - nom du 1
2 - nom du 2
3 - nom du 2
4 - nom du 2  
5 - nom du 2  
ainsi de suite.  
 
QU'est-ce que ne va pas?
Merci.

Reply

Marsh Posté le 09-09-2005 à 14:08:02   

Reply

Marsh Posté le 09-09-2005 à 14:13:18    

Je peux savoir pourquoi tu utilises pas les fonction XML pour parser ton truc ? Au lieu de faire ca avec un systeme d'ereg qui donc risque de se crasher (comme il le fait) si tu foires une virgule quelque part?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 09-09-2005 à 14:15:58    

Simplement parce que je ne connais pas les fonctions XML :)
Je sais bien que ce serait plus simple, mais le temps m'oblige a utiliser ce script, qui fonctionnait pas mal.

Reply

Marsh Posté le 09-09-2005 à 14:33:28    

le temps tu l'aurais gagné largement avec les fonctions XML, et au mieux utilise DOM XML ca sort comme du ptit lait

Reply

Marsh Posté le 09-09-2005 à 15:22:01    

Alors voila ce que j'ai :

Code :
  1. <?php
  2. $file = "*******************a/xml.php";
  3. function startElement($parser, $name, $attribs)
  4. {
  5.    echo "&lt;<font color=\"#0000cc\">$name</font>";
  6. }
  7. function endElement($parser, $name)
  8. {
  9.    echo "&lt;/<font color=\"#0000cc\">$name</font>&gt;";
  10. }
  11. function characterData($parser, $data)
  12. {
  13.    echo "<strong>$data</strong>";
  14. }
  15. function new_xml_parser($file)
  16. {
  17.    global $parser_file;
  18.    $xml_parser = xml_parser_create();
  19.    xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1);
  20.    xml_set_element_handler($xml_parser, "startElement", "endElement" );
  21.    xml_set_character_data_handler($xml_parser, "characterData" );
  22.    if (!($fp = @fopen($file, "r" ))) {
  23.        return false;
  24.    }
  25.    if (!is_array($parser_file)) {
  26.        settype($parser_file, "array" );
  27.    }
  28.    $parser_file[$xml_parser] = $file;
  29.    return array($xml_parser, $fp);
  30. }
  31. if (!(list($xml_parser, $fp) = new_xml_parser($file))) {
  32.    die("Impossible d'ouvrir le fichier XML" );
  33. }
  34. while ($data = fread($fp, 4096)) {
  35.    xml_parse($xml_parser, $data, feof($fp));
  36. }
  37. xml_parser_free($xml_parser);
  38. ?>


 
Je récupere les elements, qui sont affiché presque comme quand on lit un fichier xml avec son browser.
Mais j'en suis finalement au meme point qu'avec un fichier xml simple, des lors, je ne vois toujorus pas comment récuperer les données pour en faire ce que je veux.


Message édité par Mush22 le 09-09-2005 à 15:22:44
Reply

Sujets relatifs:

Leave a Replay

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