\n"; print "\n"; print "Essai de lecture avec PHP\n"; print "\n"; print "

lecture de la structure avec le script read-index4.php

\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 "

".$dptdata."

"; print ""; ?>