Bonjour à tous,

Je suis en train de développer (pour un stage) une application web qui utilise des données contenues dans un fichier XML de la forme (version simplifiée) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
<reservations>
<reservation id="1">
<date>25/08/2009</date>
<ville>Paris</ville>
</reservation>
...
<reservation id="246">
<date>29/08/2009</date>
<ville>Toulouse</ville>
</reservation>
</reservations>
Dans mon code Javascript, je dois accéder plusieurs fois aux valeurs contenus dans ce fichier pour afficher les réservations (en SVG).

Ma première idée (la plus courte à écrire ) a été de stocker tous les noeuds utiles dans des tableaux avec le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
var dateTab = xmlDocument.getElementsByTagName("date");
var villeTab = xmlDocument.getElementsByTagName("ville");
Etant donné qu'à chaque fois je traîte toutes les réservations avec une boucle :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
var nbReservations = xmlDocument.getElementsByTagName("reservation").length;
for(var i=0; i<nbReservations; i++) {...
je peux récupérer toutes les données d'une réservation en accédant directement aux tableaux :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
dateTab[i] et villeTab[i]
Dans le code complet, le noeud <reservation> a une vingtaine de fils, et le fichier peut contenir de 20 à 2000 (cas extrême) noeuds <reservation>.

Ma méthode fonctionne, mais il doit y sûrement avoir des solutions plus efficaces, notamment lorsque le nombre de noeuds est très élevé.

Les 2 autres solutions auxquelles j'ai pensé sont :

1) Stocker uniquement la liste des id et à chaque fois que j'ai besoin des données, je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
var reservation = xmlDocument.getElementById(idTab[i]);
var date = reservation.firstChild;
var ville = reservation.firstChild.nextSibling; (ou .lastChild)
2) Même méthode que la précédente, mais en utilisant XPath.

J'espère que mes explications sont assez claires et pas trop ennyeuses.

Pour résumé : je voudrais savoir s'il y a une méthode optimale pour ce genre de traîtements.
J'avais utilisé les tableaux par feignantise et aussi par ce qu'accéder à un champ d'un tableau me semblait le plus rapide (en terme de performances). Cependant, stocker autant de données n'est peut-être pas conseillé (notamment par mon patron ), ce qui m'a poussé à m'interroger sur les autres solutions.

J'espère qu'il y aura quelques courageux pour me lire jusqu'au bout

Merci d'avance,
b0u31