Bonsoir @ touteszéatous,
Je suis en train de m'essayer à la lecture de fichier XML en PHP ...
L'idée est de construire une liste d"roulante en fonction de la sélection utilisateur :
- soit il n'a rien choisi => $_POST['id_region'] est vide,
- soit il a choisi une région => $_POST['id_region'] contient la valeur de la région,
- soit il a choisi un département => $_POST['id_depart'] contient la valeur du département, $_POST['id_region'] est forcément renseigné.
Je me suis essayé à plusieurs syntaxes, mais la seule qui fonctionne est dans le cas où rien n'est sélectionné...
Voici à quoi peut ressembler mon fichier XML
Code XML : 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 <MAIN> <REGION id="22" nom="Provence Alpes Cte d'azur" nb_lots="2554"> <DEPARTEMENT id="13" nom="Bouches du Rhne" nb_lots="1311"> <VILLE cp="13100" nom="Aix en provence" nb_lots="200" /> <VILLE cp="13210" nom="St remy de provence" nb_lots="72" /> <VILLE cp="13015" nom="Marseille" nb_lots="623" /> </DEPARTEMENT> <DEPARTEMENT id="84" nom="Vaucluse" nb_lots="72"> <VILLE cp="84130" nom="Le pontet (avignon)" nb_lots="72" /> </DEPARTEMENT> </REGION> <REGION id="21" nom="Poitou Charentes" nb_lots="252"> <DEPARTEMENT id="17" nom="Charente Maritime" nb_lots="192"> <VILLE cp="17220" nom="St rogatien (la rochelle)" nb_lots="29" /> <VILLE cp="17000" nom="La rochelle" nb_lots="82" /> <VILLE cp="17390" nom="La tremblade" nb_lots="2" /> <VILLE cp="17300" nom="Rochefort" nb_lots="15" /> </DEPARTEMENT> <DEPARTEMENT id="86" nom="Vienne" nb_lots="60"> <VILLE cp="86000" nom="Poitiers" nb_lots="60" /> </DEPARTEMENT> </REGION> </MAIN>
Voici mon code :
Le problème c'est que seul la 1re condition fonctionne ... En fait dès que je veut faire la liste des villes à l'intérieur d'un nœud, ça ne fonctionne pas. Je crois que le problème vient du fait que je ne sait pas accéder directement à un nœud tel que la région ou le département en lui passant un paramètre...
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 <select name="cp" size="1" id="cp" > <option value="-1" selected="selected"> </option> <?php $xml = simplexml_load_file('media/liste.xml'); $recup = $xml->xpath('/MAIN/REGION/DEPARTEMENT/VILLE') ; if ( $_POST['id_region'] == "") { $ville = array(); foreach ($recup as $list_ville) { $cp = "'".$list_ville['cp']."'" ; $ville["'".$list_ville['cp']."'"] = $list_ville['nom']; } asort($ville); foreach ($ville as $cp => $nom) { echo '<option value='.$cp.'>'.$nom.'</option>'; } } else { if ($_POST['id_depart'] == "") { foreach ($xml->REGION as $region) { if ($region->id == $_POST['id_region']) { foreach ($recup as $list_ville) { echo '<option value="'.$list_ville['cp'].'">'.$list_ville['nom'].'</option>'; } } } } else { $dep = $_POST['id_depart']; $recup = $xml->xpath('/MAIN/REGION/DEPARTEMENT[contains(id,$dep)]/VILLE') ; $ville = array(); foreach ($recup as $list_ville) { //echo '<option value="'.$list_ville['cp'].'">'.$list_ville['nom'].'</option>'; $cp = "'".$list_ville['cp']."'" ; $ville["'".$list_ville['cp']."'"] = $list_ville['nom']; } asort($ville); foreach ($ville as $cp => $nom) { echo '<option value='.$cp.'>'.$nom.'</option>'; } } } ?> </select>
J'ai aussi essayé des choses dans ce genre '/REGION/DEPARTEMENT/@id' pour pointer l'attribut 'id' de département...
J'ai cherché sur le web, mais la plupart des exemples concerne les flux RSS donc des XML qui ont des balises ouvrantes et des balises fermantes et apparemment la syntaxe pour accéder aux info n'est pas la même...
Quelqu'un aurait-il svp une idée de comment je pourrais faire ?
Excellente soirée @ touteszéatous et à bientôt !
Partager