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) :
Dans mon code Javascript, je dois accéder plusieurs fois aux valeurs contenus dans ce fichier pour afficher les réservations (en SVG).
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>
Ma première idée (la plus courte à écrire) a été de stocker tous les noeuds utiles dans des tableaux avec le code suivant :
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 dateTab = xmlDocument.getElementsByTagName("date"); var villeTab = xmlDocument.getElementsByTagName("ville");
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
3 var nbReservations = xmlDocument.getElementsByTagName("reservation").length; for(var i=0; i<nbReservations; 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>.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 dateTab[i] et villeTab[i]
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 :
2) Même méthode que la précédente, mais en utilisant XPath.
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)
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 feignantiseet 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
Partager