Envoyé par : Dromygolo
Date : 11/12/2004 17:01
Bonjour à tous,
Prenons un fichier xml :
<?xml version="1.0"?> <racine> <noeud> <valeur1>A</valeur1> <valeur2>valeurpourA</valeur2> </noeud> <noeud> <valeur1>B</valeur1> <valeur2>valeurpourB</valeur2> </noeud> <noeud> ..... </racine>
Comment demander à mon appli XUL de récupérer la valeur2 lorsque la valeur1 vaut B pour l'afficher dans un label ?
Savez-vous où je pourrais trouver des exemples de récupération d'éléments dans un fichier XML ?
Merci
Envoyé par : laurentj
Date : 12/12/2004 11:02
Il faut que tu apprennes les fonctions DOM. C'est le b-a-ba pour manipuler les données dans un fichier XML.
Pour cela, plusieurs pistes :
Concernant ton problème trivial. Tu fais une boucle en javascript sur la liste de tes noeud "noeud", et à chaque fois, tu récupère le noeud fils de ta balise valeur1, noeud qui est de type texte, dont tu récupère la valeur. Tu la teste, et si c'est la bonne, tu recupère de la même façon ce qu'il y a dans valeur2 et tu quittes la boucle.
désolé, pas le temps de te donner un exemple concret. Ca sera ton exercice du week-end
Envoyé par : Dromygolo
Date : 12/12/2004 17:08
Merci pour ces infos laurentj,
voici ce que j'ai réussi à obtenir jusqu'à maintenant :
var content = "<?xml version=\"1.0\"?><racine><noeud><valeur1>A</valeur1><valeur2>valeurpourA</valeur2></noeud><noeud><valeur1>B</valeur1><valeur2>valeurpourB</valeur2></noeud></racine>"; var parser = new DOMParser(); var domtree = parser.parseFromString(content, "text/xml"); var nodes = document.evaluate("/racine/noeud",domtree,null,0,null); var nodelist = new Array(); var fullnode = nodes.iterateNext(); while (fullnode) { nodelist.push(fullnode); fullnode = nodes.iterateNext(); } for(var i=0; i < nodelist.length; i++) { node=nodelist[i]; var valeur1 = document.evaluate("valeur1/text()",node,null,0,null); if (valeur1 = "B") { var valeur2 = document.evaluate("valeur2/text()",node,null,0,null); alert("valeur1=" + valeur1.iterateNext().nodeValue + "\n" + "valeur2=" + valeur2.iterateNext().nodeValue); } }
Deux choses :
if (valeur1 == "B")
ne fonctionne pas, doit y avoir une astuce toute con, mais j'ai pas trouvé :-(
Merci
Envoyé par : laurentj
Date : 13/12/2004 13:38
Il y a bien plus simple que cela
var content = "<?xml version=\"1.0\"?><racine><noeud><valeur1>A</valeur1><valeur2>valeurpourA</valeur2></noeud><noeud><valeur1>B</valeur1><valeur2>valeurpourB</valeur2></noeud></racine>"; var parser = new DOMParser(); var domtree = parser.parseFromString(content, "text/xml"); var noeuds = domtree.getElementsByTagName("noeud"); var val1, val2=null; for(i=0; i < noeuds.length; i++){ noeudval1 = noeuds.getElementsByTagName("valeur1"); val1= noeudval1[0].childNodes[0].nodeValue; if(val1 == 'B'){ noeudval2 = noeuds.getElementsByTagName("valeur2"); val2= noeudval2[0].childNodes[0].nodeValue; break; } } if(val2!=null) alert("valeur 2 vaut =" + val2);
à partir d'un fichier XML : les fonctions pour charger un fichier xml (pour une appli web, voir XMLHttpRequest) te renvoi directement l'equivalent de domtree (donc à partir de la 4ieme ligne, c'est identique).
Envoyé par : Dromygolo
Date : 13/12/2004 23:59
Merci pour ton aide,
une petite correction dans le code précédent pour ceux que ça pourrait intéresser :
noeudval1 = noeuds[i].getElementsByTagName("valeur1");
noeudval2 = noeuds[i].getElementsByTagName("valeur2");
Il n'est plus possible de poster des messages dans ce forum.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.