Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML
XML Forum d'entraide sur XML avec PHP. Exemples : SimpleXML, OpenXML... Avant de poster -> FAQ XML, Cours XML et Sources XML
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/04/2006, 15h14   #1
Candidat au titre de Membre du Club
 
Inscription : mars 2006
Messages : 74
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 74
Points : 14
Points : 14
Par défaut [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
Dargos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2006, 15h17   #2
Membre expérimenté
 
Inscription : octobre 2004
Messages : 872
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 872
Points : 582
Points : 582
salut
ta classe xmlParser est basé sur sax dom ou des ereg??
normalement ca devrai passer avec une aproche sax
jeff_! est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2006, 15h21   #3
Candidat au titre de Membre du Club
 
Inscription : mars 2006
Messages : 74
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 74
Points : 14
Points : 14
voila ma classe
Code :
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
Dargos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2006, 17h05   #4
Candidat au titre de Membre du Club
 
Inscription : mars 2006
Messages : 74
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 74
Points : 14
Points : 14
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 :
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.
Dargos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2006, 21h00   #5
Modérateur
 
Avatar de Nesmontou
 
Homme Benjamin PREVOT
Architecte de système d'information
Inscription : septembre 2004
Messages : 1 569
Détails du profil
Informations personnelles :
Nom : Homme Benjamin PREVOT
Âge : 30
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : Finance

Informations forums :
Inscription : septembre 2004
Messages : 1 569
Points : 2 501
Points : 2 501
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 :
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
Nesmontou est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2006, 11h25   #6
Candidat au titre de Membre du Club
 
Inscription : mars 2006
Messages : 74
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 74
Points : 14
Points : 14
Bonjour tout le monde
je viens de testé le code
Code :
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.
Dargos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2006, 11h27   #7
Membre régulier
 
Inscription : mars 2006
Messages : 92
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 92
Points : 90
Points : 90
c le tps d'execution qui est trop long !
Utilise le DOM pour parcourir ton arbre xml
monsieurjean est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2006, 12h25   #8
Candidat au titre de Membre du Club
 
Inscription : mars 2006
Messages : 74
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 74
Points : 14
Points : 14
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
Dargos est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h04.


 
 
 
 
Partenaires

Hébergement Web