Navigation dans un fichier XML
Salut tout le monde et bonne année!
Toujours en quête de solutions miracles je teste en ce moment une solution de liste déroulante dynamiques liées, à partir d'un fichier XML. Dans cet exemple le sujet des deux listes est le lien entre un pays et ses régions ou provinces.
J'utilise donc Jquery et Ajax pour naviguer dans mon fichier XML et en récupérer les valeurs appropriées.
J'ai réussi à obtenir un résultat positif avec la liste déroulante relative aux pays, par contre je rencontre des difficultés avec celle des régions.
Voici les bout de codes relatifs aux listes liées:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| <form id="frmRecherche" name="frmRecherche" method="post">
<label>Pays : </label>
<select name="sPays_nom" id="sPays_nom">
<option value="-100"> --- </option>
</select>
<label>Région : </label>
<select name="sRegionLG_nom" id="sRegionLG_nom">
<option value="-100"> --- </option>
</select>
</form> |
Code:
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
| <?xml version="1.0" encoding="utf-8"?>
<Terre>
<Pays>
<PaysID>1039</PaysID>
<PaysNameEN>Rwanda</PaysNameEN>
<PaysNameFR>Rwanda</PaysNameFR>
<Regions>
<Region>
<RegionID>10575</RegionID>
<RegionName>Eastern Province</RegionName>
</Region>
<Region>
<RegionID>10576</RegionID>
<RegionName>Kigali City</RegionName>
</Region>
<Region>
<RegionID>10577</RegionID>
<RegionName>Northern Province</RegionName>
</Region>
<Region>
<RegionID>10578</RegionID>
<RegionName>Southern Province</RegionName>
</Region>
<Region>
<RegionID>10579</RegionID>
<RegionName>Western Province</RegionName>
</Region>
</Regions>
</Pays>
<Pays>
<PaysID>1044</PaysID>
<PaysNameEN>Sierra Leone</PaysNameEN>
<PaysNameFR>Sierra Leone</PaysNameFR>
<Regions>
<Region>
<RegionID>10624</RegionID>
<RegionName>Eastern Province</RegionName>
</Region>
<Region>
<RegionID>10625</RegionID>
<RegionName>Northern Province</RegionName>
</Region>
<Region>
<RegionID>10626</RegionID>
<RegionName>Southern Province</RegionName>
</Region>
<Region>
<RegionID>10627</RegionID>
<RegionName>Western Area</RegionName>
</Region>
</Regions>
</Pays>
</Terre> |
Code:
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
| jQuery(document).ready(function($){
$.ajax({
type: "GET",
url: './includes/data/geographie.xml',
dataType: "xml",
success: function(xml)
{
var arrayPays = new Array();
$("#sPays_nom").get(0).length = 1;
//je boucle sur tous les noeuds <Pays>
$(xml).find('Pays').each(
function()
{
// création d'une table qui permettra de
// trier les données alphabétiquement
arrayPays[arrayPays.length] = $(this);
}
);
// #hiddenLangue est un input caché qui me permet de savoir
// en quelle langue afficher les résultats
var LG = $("#hiddenLangue").val();
(LG == "FR") ? var NAME = "PaysNameFR"; : var NAME = "PaysNameEN";
//triage alphabétique des pays pour affichage dans la liste déroulante
arrayPays.sort(function(a,b){
paysA = a.find(NAME).text();
paysA = effacerAccents(paysA);
paysB = b.find(NAME).text();
paysB = effacerAccents(paysB);
if (paysA < paysB){
return -1;
}else return 1;
});
// création des options avec les données appropriées
for (indexPays = 0; indexPays<arrayPays.length; indexPays ++){
var ID = arrayPays[indexPays].find('PaysID').text();
var PAYS = arrayPays[indexPays].find(NAME).text();
$("#sPays_nom").append(new Option(PAYS, ID, false, true));
}
// placer le selected par défaut sur 'vide'
$("#sPays_nom").val(-100);
}
});
// cette fonction s'active au changement de selected (onChange)
$("#sPays_nom").change(function()
{
var paysSelected = this.value;
$.ajax({
type: "GET",
url: './includes/data/geographie.xml',
dataType: "xml",
success: function(xml)
{
$("#sRegionLG_nom").get(0).length = 1;
// je ne vois pas comment atteindre
// <Pays> ==> <PaysID>1039</PaysID> ==> <Regions>
// puis boucler tout les éléments <Region>
// (biensur 1039 est un exemple qui correspond à paysSelected
}
});
});
}); |
En fait je ne sais pas comment atteindre spécifiquement le noeud <Pays> dans lequel se trouvent <PaysID>1039</PaysID> (c'est un exemple). Pour pouvoir ensuite atteindre son noeud <Regions> et boucler sur tous les noeuds <Region>.
En fait ce que je ne sais pas faire c'est atteindre le le Pays ayant l'ID 1039 pour le reste je peux me débrouiller mais ça, j'ai eu beau essayer pleins de solutions, je n'arrive à rien.
Auriez-vous une idée?
Thx et bonne journée.