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

 


Dernière réponse
Sujet : [PHP] Parser, fonctionnement??
shinji J'ai réussit en testant la longueur de trim($data) au début de la fonction characterData si elle est nulle, j'ignore cette data!
 
Par contre, je n'arrive pas à parser une variable à la place d'un fichier. Pourun fichier, on analyse ligne par ligne :  
 
while ($data = fread($fp, 4096)) {  
     if (!xml_parse($xml_parser, $data, feof($fp))) {  
         die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)));  
     }  
}

 
mais pour une variable, je voulais l'analyser d'un seul coup :
 
xml_parse($xml_parser, $data, ???)
 
mais que mettre comme condition de fin?
 
Une idée?

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
shinji J'ai réussit en testant la longueur de trim($data) au début de la fonction characterData si elle est nulle, j'ignore cette data!
 
Par contre, je n'arrive pas à parser une variable à la place d'un fichier. Pourun fichier, on analyse ligne par ligne :  
 
while ($data = fread($fp, 4096)) {  
     if (!xml_parse($xml_parser, $data, feof($fp))) {  
         die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)));  
     }  
}

 
mais pour une variable, je voulais l'analyser d'un seul coup :
 
xml_parse($xml_parser, $data, ???)
 
mais que mettre comme condition de fin?
 
Une idée?
shinji Je pense avoir trouvé!
A mon avis, la fonction characterData est appellée entre les balises <TERRITOIRE> et <ROW> et entre les balises <ROW> et <COMMUNE> du coup c'est pour ça que $nbredonnee est incrémenté de 2 de trop à chaque fois!
 
Comment puis-je résoudre cela?  
-Tester si $data est constitué que d'espace et de retours à la ligne?
-Tester si la balise qui suit est fermante, si ce n'est pas le cas, les données doivent être ignorées.
shinji ça change rien, j'ai trouvé où le srcipt a mis des données dans le tableau en rajoutant ça à la fin:
 
script:
-------
....
echo "tableau:<br>";
for($h=0;$h<2;$h++){
 for($k=0;$k<6;$k++){
  echo "tab[$h][$k]:".$tableau[$h][$k]."<br>";
 }
 echo "<br>";
}

 
Voici le résultat:
------------------
tableau:
tab[0][0]:  
tab[0][1]:  
tab[0][2]:35331
tab[0][3]:  
tab[0][4]:  
tab[0][5]:114150
 
tab[1][0]:  
tab[1][1]:  
tab[1][2]:35332
tab[1][3]:  
tab[1][4]:  
tab[1][5]:75739

 
Je vois pas pourquoi cela se trouve en colonne 2 et 5???
Peut être que je suis miro?
nicotine essaie de declarer 'tableau' en debut de script , en dehors d'une fonction ...
 
$tableau = array();
shinji Allez juste un p'tit coup de main, pas longtemps...
shinji J'utilise un parser en php mais je ne comprends pas à quels moments sont appellés les fonctions StartElement et EndElement.
 
Si vous comprenez?
 
Donnees.xml:
<?xml version = '1.0' encoding = 'ISO-8859-1'?>
<TERRITOIRE>
   <ROW>
      <COMMUNE>35331</COMMUNE>
      <REVMENAGE>114150</REVMENAGE>
   </ROW>
   <ROW>
      <COMMUNE>35332</COMMUNE>
      <REVMENAGE>75739</REVMENAGE>
   </ROW>
</TERRITOIRE>

 
Script php:
 
<?
global $debut,$nbredonnee,$tableau,$ligne,$i;
$file="Donnees.xml";  
 
$i=-1;
function startElement($parser, $name, $attribs) {  
    global $debut,$nbredonnee,$i;
    if($name=="ROW" ){
     $i++;
     $debut=1;
     $nbredonnee=1;
    }  
}  
function endElement($parser, $name) {  
 if($name=="ROW" ){
  echo "<br>";
 }
}  
function characterData($parser, $data) {  
    global $tableau,$debut,$nbredonnee,$ligne,$i;
    if($debut==1){
     $debut=0;
     echo "ligne n°".$i;
     $tableau[$i][0]=$data;
     echo " commune: ".$tableau[$i][0];
    }else{
     $tableau[$i][$nbredonnee]=$data;
     echo $tableau[$i][$nbredonnee];
     $nbredonnee++;
    }
}  
 
$xml_parser = xml_parser_create();  
xml_set_element_handler($xml_parser, "startElement", "endElement" );  
xml_set_character_data_handler($xml_parser, "characterData" );  
if (!($fp = fopen($file, "r" ))) {  
die("could not open XML input" );  
}  
while ($data = fread($fp, 4096)) {  
     if (!xml_parse($xml_parser, $data, feof($fp))) {  
         die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)));  
     }  
}  
echo "tab:".$tableau[0][0]."<br>";
echo "tab:".$tableau[0][1]."<br>";
echo "tab:".$tableau[1][0]."<br>";
echo "tab:".$tableau[1][1]."<br>";
echo "count:".count($tableau);
xml_parser_free($xml_parser);
?>

 
A la fin du script, quand j'affiche le contenu de $tableau,il n'y a rien dans ce tableau (pas aux endroits 0,1 mais plus loin dans le tableau),donc $nbredonnee est incrémenté sans que je m'en rende compte. D'où mon topic
 
SVP un ch'ti coup pouce, please!
:)

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)