1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
| // Fichier à analyser
$file = "Content.xml";
// Etat de la pile de parcours du document XML
$stack = array();
// Valeur d'un dernier élément lu
$globaldata ="";
//Ouverture du noeud
function startElement($parser, $name, $attrs){
global $stack;
array_push($stack,$name);
}
//Fermetur du noeud
function endElement($parser, $name){
global $stack;
global $globaldata;
print "<b>".$globaldata."</b></".$name."></div> ";
array_pop($stack);
}
//Contenu du noeud
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");//Début et Fin
xml_set_character_data_handler($xml_parser, "characterData");//Contenu
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); |
Partager