Bonjour,
j'essaye actuellement de parser un fichier xml en évenementiel avec php.
Voici par exemple (faisons simple) le contenu du fichier xml nommé fichier.xml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <racine> <id_ville>1</id_ville> <nom>Paris</nom> <codePostal>75001</codePostal> </racine>
Pour parser ce fichier, càd récupérer les noms des balises (racine, id_ville, nom, codePostal) et les données des balises (1, Paris, 75001), voici mon script tout simple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 $file = "fichier.xml"; function recuperer_nom_balise_ouvrante($parseur, $nom_balise_ouvrante, $array_attributs) { echo"<br>Nom de la balise ouvrante : ".$nom_balise_ouvrante } function recuperer_donnee_entre_les_balises($parseur, $donnee) { echo"<br>Donnée entre les balises : ".$donnee; } function recuperer_nom_balise_fermante($parseur, $nom_balise_fermante) { echo"<br>Nom de la balise fermante : ".$nom_balise_fermante; } /*On crée le parseur xml :*/ $parseur = xml_parser_create(); /*Les gestionnaires d'événement :*/ xml_set_element_handler($parseur, "recuperer_nom_balise_ouvrante", "recuperer_nom_balise_fermante"); xml_set_character_data_handler($parseur, "recuperer_donnee_entre_les_balises"); /*On ouvre le fichier xml à parser :*/ if (!($fp = fopen($file, "r"))) { die("could not open XML input"); } /*On parse :*/ while($data_fichier = fread($fp, 4096)) { if (!xml_parse($parseur, $data_fichier, feof($fp))) { die(sprintf("XML error: %s at line %d",xml_error_string(xml_get_error_code($parseur)), xml_get_current_line_number($parseur))); } }
De plus j'ai une table mysql nommée ville dont les colonnes ont les memes noms que les noms des balises ouvrantes du fichier xml, à savoir :
ville
---------
id (auto-increment)
nom (varchar)
codePostal (int)
Et moi ce que je veux c'est de mettre un bout de code qui manque au script et qui permet d'insérer la donnée dans la bonne colonne de la table ville en fonction du nom de la balise ouvrante, du genre :
si le nom de la balise ouvrante est égal à id, alors la donnée qui se trouve entre les balises <id></id> sera enregistré dans la colonne id de la table ville,
sinon si le nom de la balise ouvrante est égal à nom, alors la donnée qui se trouve entre les balises <nom></nom> sera enregistré dans la colonne nom de la table ville.
Mais je ne sais pas comment l'intégrer dans le script.
Avez-vous une idée ?
Merci d'avance, cordialement.
Partager