Parser, fonctionnement?? [PHP] - Programmation
Marsh Posté le 04-05-2001 à 01:29:51
essaie de declarer 'tableau' en debut de script , en dehors d'une fonction ...
$tableau = array();
Marsh Posté le 04-05-2001 à 10:15:20
ç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?
Marsh Posté le 04-05-2001 à 10:42:52
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.
Marsh Posté le 04-05-2001 à 12:17:21
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?
Marsh Posté le 03-05-2001 à 15:37:41
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!