Page 1 sur 1

parser xml

Posté : 24 juil. 2005, 18:34
par OTM
salut ..
ma question concerne l'analyse d'un document xml et la recupération des élements de ce dérnier et les afficher en liste ... mon code est le suivant:
<?php
global $txt;
	
/* fonction qui définit le traitement à faire quand le parseur trouve une balise  xml ouvrante */

function  startElement($parser_instance, $element_name, $attrs){
               
global $i;
/* suivant la balise on déclanche un traitement donné */  
switch($element_name)
{
	Case "DESSISI" :
	echo "La racine <p>" ;
	break ;

	Case "ETUDIANT" : $i++;
	echo "Etudiant N° "."$i"."<br>" ;
	break ;
	
                Case "NOM" : echo "le nom de l'étudiant est : "."$txt" ;
	break ;

	Case "PRENOM" : echo " sont prenom est : "."$txt" ;		break ;
}
}
	
/***************************************************/
/*/  function characterData($parser_instance, $xml_data) {    /*/
/*/        $txt=$xml_data;	                                        /*/
/*/               /*G un pb à ce niveau */	                       /*/
/*/    }                                                                            /*/     
/*************************************************/
	
/* fonction qui définit le traitement à faire quand le parseur trouve une balise  xml fermante */

function  endElement($parser_instance, $element_name){
switch($element_name)
{
	Case "ETUDIANT" : echo "<p>";
	break ;

	Case "NOM" : echo "<br>";				break ;

	Case "PRENOM" : echo "<br>";
	break ;
}
}
	
$xml_file="liste.xml";		

$parser = xml_parser_create();
xml_set_element_handler($parser,"startElement","endElement");	
xml_set_character_data_handler($parser,"characterData"); 	

$filehandler = fopen($xml_file, "r");
while($data= fread($filehandler, 4096)) {
	xml_parse($parser, $data, feof($filehandler)); 
}
		
fclose($filehandler);
xml_parser_free($parser);		

?>
mon probleme est au niveau de la fonction "characterData" , dans laquelle j'affecte à la variable $txt le contenu de chaque balise pour la'fficher par la suite dans la fonction startElement . or sa donne rien G pu comprendre que c'est impossible de faire passer la variable entre les deux fonctions.....
si qlq 1 à une idée je serai vraiment reconnaissant .... et merci

edit mere-teresa : c'est mieux de mettre le code entre balises PHP

Posté : 25 juil. 2005, 23:18
par Cyrano
Il faut que ta fonction retourne la valeur vers la fonction StartElement(), mais si celle-ci ne l'appelle pas, le résultat ne sera pas envoyé.

Schématiquement :
<?php
function a($param1)
{
    $retour = $param1 + b($param1);
    return $retour;
}

function b($param2)
{
    $valeur = $param2 / 2;
    return $valeur;
}
$nombre = 12;
$total = a($nombre);
echo("<p>". $total ."</p>\n");
Dans le cas de cet exemple, j'appel la fonction a() en lui envoyant un paramettre qu'elle doit me retournée additionnée de la moitié de la valeur de celle-ci. Dans la fonction a(), je fais un appel à la fonction b() pour calculer la moitié de la valeur de mon paramètre en lui envoyant ce paramètre. La fonction b() calcule et retourne la valeur demandée

Puis la fonction a() me retourne le résultat du calcul demandé.

Donc on peut faire échanger des variables entre fonction, mais il faut les envoyer explicitement.

Utilise une variable globale

Posté : 28 sept. 2005, 23:50
par cow_boy17
Tu peux utiliser une variable globale.
Par exemple tu peux utiliser une variable globale $balise. Dans la fonction startElement tu peux mémoriser le nom de la balise de début dans cette variable globale :
$balise=$element_name;

Ainsi dans characterData tu peux afficher ou non ta variable $xml_data en fonction du nom de la balise par exemple :
if ($balise=="ETUDIANT")
echo "Etudiant : " . $xml_data ."<Br>";

Une autre solution reste d'utiliser des variables de session mais ça revient au même !