Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Récupération des éléments d'un noeud XML

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

# Re: Récupération des éléments d'un noeud XML

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 :-)

# Re: Récupération des éléments d'un noeud XML

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é :-(
  • ici, je récupère des infos en partant d'une string, comment obtenir cette string à partir d'un fichier XML ?

Merci

# Re: Récupération des éléments d'un noeud XML

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).

# Re: Récupération des éléments d'un noeud XML

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.