IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[XML] [EXPAT] Parser un fichier xml avec php


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 74
    Points : 46
    Points
    46
    Par défaut [XML] [EXPAT] Parser un fichier xml avec php
    Bonjour tout le monde voila j'ai un fichier xml en dure qui fait 400 000 lignes je dois récupérer l'url pour des photos.
    Mon probleme est que je n'arrive pas à le parser grace a ma classe xmlparser
    je pense qu'il est trop volumineux
    Quelqu'un pourrait il me conseiller.
    J'ai essayé d'alleger le fichier avec des expression reg ---> trop bien il fait encore 180 000 lignes

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    salut
    ta classe xmlParser est basé sur sax dom ou des ereg??
    normalement ca devrai passer avec une aproche sax

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 74
    Points : 46
    Points
    46
    Par défaut
    voila ma classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    <?
    class XMLParser {
       var $filename;
       var $xml;
       var $data;
     
       function XMLParser($xml_file)
       {
           $this->filename = $xml_file;
           $this->xml = xml_parser_create();
           xml_set_object($this->xml, $this);
           xml_set_element_handler($this->xml, 'startHandler', 'endHandler');
           xml_set_character_data_handler($this->xml, 'dataHandler');
           $this->parse($xml_file);
       }
     
       function parse($xml_file)
       {
           if (!($fp = fopen($xml_file, 'r'))) {
                 die('Cannot open XML data file: '.$xml_file);
                   return false;
           }
     
           $bytes_to_parse = 512;
     
           while ($data = fread($fp, $bytes_to_parse)) {
               $parse = xml_parse($this->xml, $data, feof($fp));
     
               if (!$parse) {
                   die(sprintf("XML error: %s at line %d",
                       xml_error_string(xml_get_error_code($this->xml)),
                           xml_get_current_line_number($this->xml)));
                           xml_parser_free($this->xml
                         );
               }
           }
     
           return true;
       }
     
       function startHandler($parser, $name, $attributes)
       {
           $data['name'] = $name;
           if ($attributes) { $data['attributes'] = $attributes; }
           $this->data[] = $data;
       }
     
       function dataHandler($parser, $data)
         {
         if($data = trim($data))
             {
             $index = count($this->data) -1;
             if(isset($this->data[$index]['content'])) 
               $this->data[$index]['content'] .= $data;
               else $this->data[$index]['content'] = $data;
             }
         }
     
     
       function endHandler($parser, $name)
       {
           if (count($this->data) > 1) {
               $data = array_pop($this->data);
               $index = count($this->data) - 1;
               $this->data[$index]['child'][] = $data;
           }
       }
    	function ReturnData ()
    	{
    		return $this->data;			 
    	}
    }
    ?>
    et ca passe pas

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 74
    Points : 46
    Points
    46
    Par défaut
    Re coucou
    je viens de faire un php.info() pour voir si la librairie expat etait installé j'ai la version expat_1.95.7 et le xml support et namespace active

    j'ai utilisé ce code (c'est pour utilisé le parser avec sax comme tu me l'a conseillé):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $fp = fopen("catalog_fr.xml", "r") or die("Fichier introuvable. L'analyse a ete suspendue"); 
     
    while ($fdata = fread($fp, filesize($fp))) {
     
    	xml_parse($xml_parseur, $fdata, feof($fp)) or die(
     
    		sprintf("Erreur XML : %s à la ligne %d\n", 
     
    		xml_error_string(xml_get_error_code($xml_parseur)), 
     
    		xml_get_current_line_number($xml_parseur))
     
    		);
    quand je lance ce fichier voici l'erreur que j'obtient, ce sont des warning mais je veux pas les avoir sur ma page

    Warning: filesize(): Stat failed for Resource id #27 (errno=2 - No such file or directory)

    Warning: fread(): Length parameter must be greater than 0.

  5. #5
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Salut, tu peux jeter un oeil sur la document de PHP.net pour la fonction filesize : elle prend en paramètre une chaîne de caractères représentant le chemin vers ton fichier. Ton code serait plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $fichier = 'catalog_fr.xml';
    $fp = fopen($fichier, "r") or die("Fichier introuvable. L'analyse a ete suspendue"); 
     
    while ($fdata = fread($fp, filesize($fichier))) { 
     
       xml_parse($xml_parseur, $fdata, feof($fp)) or die( 
     
          sprintf("Erreur XML : %s à la ligne %d\n", 
     
          xml_error_string(xml_get_error_code($xml_parseur)), 
     
          xml_get_current_line_number($xml_parseur)) 
     
          );
    Bon développement
    Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

    F.A.Q. : Java, PHP, (X)HTML / CSS

    N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 74
    Points : 46
    Points
    46
    Par défaut
    Bonjour tout le monde
    je viens de testé le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $xml_parseur = xml_parser_create();
    $fichier = "../catalog_fr.xml"; 
    $fp = fopen($fichier, "r") or die("Fichier introuvable. L'analyse a ete suspendue"); 
    while ($fdata = fread($fp, filesize($fichier))) { 
    xml_parse($xml_parseur, $fdata, feof($fp)) or die( 
     
    sprintf("Erreur XML : %s à la ligne %d\n", 
    xml_error_string(xml_get_error_code($xml_parseur)), 
    xml_get_current_line_number($xml_parseur)) 
          ); 
    }
    Mon probleme maintenant c'est que j'ai une page serveur introuvable
    Quand je met en commentaire le while ca marche ma page s'affiche correctement mais je ne voie pas pourquoi il me met pas un message d'erreur, j'ai juste serveur introuvable c'est bizarre
    Si quelq'un peut m'aider,merci a vous.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 92
    Points : 102
    Points
    102
    Par défaut
    c le tps d'execution qui est trop long !
    Utilise le DOM pour parcourir ton arbre xml

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 74
    Points : 46
    Points
    46
    Par défaut
    On m'a dit d'utilisé une approche sax pour des gros fichier comme le mien.
    Je ne sais pas comment utilisé dom mais sur les sites il le déconseille pour des fichier volumineux

    Sachant que mon fichier fait 40mo comment le parser le plus rapidement?
    Si vous avait des exemples merci

Discussions similaires

  1. [XML] parser un fichier xml avec php pour refaire un xml.
    Par steve3000 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 02/10/2008, 10h22
  2. [DOM] création de fichier XML avec PHP
    Par cortex007 dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 09/12/2007, 11h31
  3. [DOM XML] Insertion données dans fichier XML avec PHP pour Flash ?
    Par ExSter dans le forum Bibliothèques et frameworks
    Réponses: 17
    Dernier message: 10/05/2006, 11h16
  4. [XML] lire un fichier xml avec php
    Par java_fun dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 31/03/2006, 12h21
  5. [XML] [EXPAT] Parser XML avec PHP
    Par glsn dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 20/12/2005, 12h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo