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 93 94 95
| $file = 'data.xml';
$depth = 0; //array() variable de la profondeur de l'arbre
$globaldata =""; // Valeur du dernier élément lu
$table = "";
$tab_tables['TABLEDEPARTEMENT'] = 'departement';
$tab_tables['TABLEPAYS'] = 'pays';
$tab_tables['TABLEREGION'] = 'regions';
$tab_tables['TABLEADRESSE'] = 'adresses';
$tab_tables['TABLEDEPTVOISIN'] = 'dptvoisins';
$tab_tables['TABLELOCALITE'] = 'localites';
$tab_tables['TABLETYPE'] = 'type';
// Fonction associée à lévénement début délément
function startElement($parser, $name, $attrs) {
global $depth, $tab_tables, $table;
$depth++;
if ($depth == 2) $table = $tab_tables[$name];
echo "<BR>$depth, $name, $table";
}
// Fonction associée à lévénement données textuelles
function characterData($parser, $data){
global $globaldata;
$globaldata = $data;
}
// Fonction associée à lévénement fin délément
function endElement($parser, $name){
global $depth, $globaldata, $table, $tab_ligne;
if ($depth == 4) $tab_ligne[$name] = $globaldata;
elseif ($depth == 3){
txt2bd($table, $tab_ligne);
unset($tab_ligne);
}
$depth--;
}
// ecrire le contenu de la ligne XML passé au tablo PHP
function txt2bd($t, $data){
echo "<BR><B>$t</B> :";
foreach ($data as $k => $v) echo "$k=<I>$v</I>| ";
}
// 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();
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1);
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"); }
$i = 1;
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)));
}
$i++;
if ($i == 50) exit;
} |
Partager