// Fichier ˆ analyser $file = "index.xml"; // variable de la profondeur du parcours de l'arbre $depth = array(); // Etat de la pile de parcours du document XML $stack = array(); // Valeur d'un dernier ŽlŽment lu $globaldata = ""; $dptdata = ""; print "\n"; print "\n"; print "
Voir l'article de"; print " "; print "Parseur
\n"; print "La valeur du contenu du tag est dans la variable globaldata. J'ai enleve les exemples d'attributes mais ca marche aussi. J'ai recree de facon factice les balises, juste pour la lisibilite.
"; print "Pour recuperer les donnees, il suffit de tester la valeur de 'name' et quand cette valeur est egale a quelquechose que tu veux tu transferes le contenu de globaldata dans une variable.
\n"; print ""; // Fonction associŽe ˆ lÕŽvŽnement dŽbut dÕŽlŽment function startElement($parser, $name, $attrs) { global $depth; global $stack; for ($i = 0; $i < $depth[$parser]; $i++) {print " ";} array_push($stack,$name); $depth[$parser]++; print "<".$name.">\n"; // print "Prof : ".$depth[$parser]." -- Att: "; //affichage des attributs de l'ŽlŽment while (list ($key, $val) = each ($attrs)) {echo "$key => $val";} print " "; } // Fonction associŽe ˆ lÕŽvŽnement fin dÕŽlŽment function function endElement($parser, $name) { global $depth; global $stack; global $globaldata; global $dptdata; for ($i = 0; $i < $depth[$parser]-1; $i++) {print " ";} print $globaldata."</".$name.">\n"; // ici je recupere la variable quand j'ai besoin // test avec le nom du departement :) // qui est affiche en bas dans le h2 if ($name == "NWDPT") { $dptdata = $globaldata; } // Pour le texte il faut une variable global qui collectionne // tant que l'on est pas sorti de texte du type // texte = texte + globaldata. //print "profondeur : ".$depth[$parser]." "; $depth[$parser]--; array_pop($stack); } // Fonction associŽe ˆ lÕŽvŽnement donnŽes textuelles function characterData($parser, $data) { global $globaldata; $globaldata = $data; } // Fonction associŽe ˆ lÕŽvŽnement de dŽtection d'un appel d'entitŽ externe function externalEntityRefHandler($parser, $openEntityNames, $base, $systemId, $publicId) { if ($systemId) { if (!list($parser, $fp) = new_xml_parser($systemId)) { printf("Impossible d'ouvrir %s ˆ %s\n", $openEntityNames, $systemId); return FALSE; } while ($data = fread($fp, 4096)) { if (!xml_parse($parser, $data, feof($fp))) { printf("Erreur XML : %s ˆ la ligne %d lors du traitement de l'entitŽ %s\n", xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser), $openEntityNames); xml_parser_free($parser); return FALSE; } } xml_parser_free($parser); return TRUE; } return FALSE; } // Fonction de crŽation du parser et d'affectation des fonctions aux gestionnaires d'ŽvŽnements function new_xml_parser($file) { global $parser_file; //crŽation du parseur $xml_parser = xml_parser_create(); //Activation du respect de la casse du nom des ŽlŽments XML xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1); //DŽclaration des fonctions ˆ rattacher au gestionnaire d'ŽvŽnement xml_set_element_handler($xml_parser, "startElement", "endElement"); xml_set_character_data_handler($xml_parser, "characterData"); xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler"); //Ouverture du fichier if (!($fp = @fopen($file, "r"))) { return FALSE; } //Transformation du parseur en un tableau if (!is_array($parser_file)) { settype($parser_file, "array"); } $parser_file[$xml_parser] = $file; return array($xml_parser, $fp); } // Appel ˆ la fonction de crŽation et d'initialisation du parseur if (!(list($xml_parser, $fp) = new_xml_parser($file))) { die("Impossible d'ouvrir le document XML"); } // Traitement de la ressource XML while ($data = fread($fp, 4096)) { if (!xml_parse($xml_parser, $data, feof($fp))) { die(sprintf("Erreur XML : %s ˆ la ligne %d\n", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } } // LibŽration de la ressource associŽe au parser xml_parser_free($xml_parser); print ""; print "