IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

r�cursivit� en javascript


Sujet :

JavaScript

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2008
    Messages
    22
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 22
    Par d�faut r�cursivit� en javascript
    Bonjour, j'essaye de faire une fonction xml2tab qui prend des fichiers xml et les transforme en tableau

    pour cela j'ai fait la fonction suivante :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    function xml2tab(xml,tab){//prend un objet xml et un tableau et remplis ce-dernier a partir du xml
     
     
    	if (xml.hasAttributes()){//si le neud a des attributs
    		alert("il y a "+xml.attributes.length+" attributs");
    		for (i = 0; i < xml.attributes.length; i++) {//pour tout les attributs on les met dans le tableau
    			alert("attribut "+i);
    			tab[xml.attributes[i].nodeName] = xml.attributes[i].nodeValue;
    		}
    	}
    	if (xml.hasChildNodes()) {//si le neud a des "enfants"
    		alert ("il y a "+xml.childNodes.length+" childNodes");
    		for (j = 0; j < xml.childNodes.length; j++) {
    		//pour tous les enfants on crée un tableau contenant le tableau généré par la fonction xml2tab avec chaque enfant de l'objet xml de depart 
    			alert("childnode "+j);
    			var newxml = xml.childNodes[j]
    			tab[xml.childNodes[j].nodeName] = new Array();
    			tab[xml.childNodes[j].nodeName] = xml2tab(newxml,tab[xml.childNodes[j].nodeName]);
    			alert("childnode "+j+" terminé");
    		}	
    	}
     
    	return tab;
    }
    Qui est lanc�e sur le xml suivant :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    <parametre page="3" nbparpage="30">
    <corps val_max_credit="100.00" val_carton="3.00" nb_joueur="200" nb_carton="13" gain_max="20.00"/>
    <entete val_max_credit="Valeur maximum de credit" val_carton="Val Carton" nb_joueur="Nombre Joueurs" nb_carton="Nombre de cartons" gain_max="Gain maximum" txq1="Taux simple quine 1" txq2="Taux simple quine 2" txdq="Taux double quine" txcp="Taux carton plein"/>
    </parametre>
    Gr�ce aux alert je vois que je passe bien par tout dans mon tableau, mais la valeur des attributs de entete et corps sont undefined, le tableau est le suivant :

    tab[page] = 3
    tab[nbparpage] = 30
    tab[corps] =
    tab[entete] =
    tab[corps][val_max_credit] = undefined
    tab[corps][val_carton] = undefined
    tab[corps][nb_joueur] = undefined
    tab[corps][nb_carton] = undefined
    tab[corps][gain_max] = undefined
    tab[entete][val_max_credit] = undefined
    tab[entete][val_carton] = undefined
    tab[entete][nb_joueur] = undefined
    tab[entete][nb_carton] = undefined
    tab[entete][gain_max] = undefined
    tab[entete][txq1] = undefined
    tab[entete][txq2] = undefined
    tab[entete][txdq] = undefined
    tab[entete][txcp] = undefined

    Je ne vois donc pas pourquoi les attributes.value sont undefined alors que les attributes.name sont bons ..... merci d'avance ....

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2008
    Messages
    22
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 22
    Par d�faut
    J'aimerais savoir si je doit acc�der � mes variables xml et tab avec this ? Est-ce que mes variables sont locales � l'heure actuelle?

  3. #3
    Expert confirm�
    Avatar de le_chomeur
    Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2006
    Messages
    3 653
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 3 653
    Par d�faut
    avant d'appeler un attributs par son nom , r�cup�re la liste et affiches leur nom via : xml.attributes[i]

    nodeValue faisant r�f�rence , a ton noeud "<parametre page="3" nbparpage="30">"

    il te faut donc r�cup�rer auparavant ton noeud , puis ses attributs , ensuite tu r�cup�re les enfants et leurs attributs

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2008
    Messages
    22
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 22
    Par d�faut
    Je ne comprend pas, ce n'est pas ce que je fait en faisant ca ?
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    tab[xml.attributes[i].nodeName] = xml.attributes[i].nodeValue;
    je cr�e une case a mon tableau qui porte le nom de mon attribut, et je lui assigne sa valeur ...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2008
    Messages
    22
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 22
    Par d�faut
    En fait mon pb, j'ai l'impression c'est que je n'arrive pas a g�n�rer mon tableau de facon r�cursive.... avec mes diff�rents alert je peux voir que je parse tout mon document xml, que j'arrive a afficher tous les attributs de tous les noeuds, mais je n'arrive pas � mettre les valeur dans le tableau que je veux retourner, j'ai toutes ces valeurs au moment ou je passe dans la fonction, mais d�s que je sort je les perd ....

  6. #6
    Expert confirm�
    Avatar de le_chomeur
    Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2006
    Messages
    3 653
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 3 653
    Par d�faut
    il y a une erreur quelque par puisque nodeValue renvois null et non pas undefined

    voila un exemple , tu n'as plus qu'� cr�er la fonction r�cursive

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Document sans nom</title>
    <script type="text/javascript">
    function afficheNoeud(){
     var monXml = document.getElementById('toto');
     var temp = "";
     for(var i = 0 , l = monXml.childNodes.length; i < l ;i++){
     	temp += "non du noeud : " + monXml.childNodes[i].nodeName + "\n";
    	if(monXml.childNodes[i].attributes != null){
    		for(var x = 0 , y = monXml.childNodes[i].attributes.length; x < y;x++){
    			temp += monXml.childNodes[i].attributes[x].nodeName + " = "+monXml.childNodes[i].attributes[x].nodeValue  + "\n";
    		}
    	} 
     }
     alert(temp);
    }
    window.onload = afficheNoeud;
    </script>
     
     
    </head>
     
    <body>
    <div id="toto">
    <parametre page="3" nbparpage="30">
    <corps val_max_credit="100.00" val_carton="3.00" nb_joueur="200" nb_carton="13" gain_max="20.00"/>
    <entete val_max_credit="Valeur maximum de credit" val_carton="Val Carton" nb_joueur="Nombre Joueurs" nb_carton="Nombre de cartons" gain_max="Gain maximum" txq1="Taux simple quine 1" txq2="Taux simple quine 2" txdq="Taux double quine" txcp="Taux carton plein"/>
    </parametre>
    </div>
    </body>
    </html>

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2008
    Messages
    22
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 22
    Par d�faut
    Merci beaucoup pour ton aide, j'ai bien regard� ta fonction et c'est comme je fait en fait. (enfin je pense)

    J'ai modifi� mon programme de cette facon :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    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
     
    function xml2tab(xml,tableau){//prend un objet xml et un tableau et remplis ce-dernier a partir du xml
     
    	var test="";
    	var tableau=new Array();
     
    	if (xml.hasAttributes()){//si le neud a des attributs
    		ligne += "il y a "+xml.attributes.length+" attributes<br>";
    		for (i = 0; i < xml.attributes.length; i++) {//pour tout les attributs on les met dans le tableau
    			ligne += "&nbsp;&nbsp;attribut "+i+" |";
    			 tableau[xml.attributes[i].nodeName] = xml.attributes[i].nodeValue;
    			ligne += xml.attributes[i].nodeName+" : "+xml.attributes[i].nodeValue+"<br>";
    		}
    	}
    	if (xml.hasChildNodes()) {//si le neud a des "enfants"
    		ligne += "il y a "+xml.childNodes.length+" childNodes<br>";
    		for (j = 0; j < xml.childNodes.length; j++) {
    		//pour tous les enfants on crée un tableau contenant le tableau généré par la fonction xml2tab avec chaque enfant de l'objet xml de depart 
    			ligne += "childnode "+j+"<br>";
    			test=xml.childNodes[0].nodeName;
    			 tableau[xml.childNodes[j].nodeName] = xml2tab(xml.childNodes[j], tableau[xml.childNodes[j].nodeName]);
    			ligne += "childnode "+j+" terminé<br>";
    		}	
    	}
    	return tableau;
    }
    puis apr�s l'appel de la fonction comme ceci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    tab = xml2tab(parametre,tab);
    je fait un :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    insert_html("id","affiche_parametre",liste+"<br><br>"+ligne);
    qui m'affiche ma ligne (et ma liste qui affiche le contenu du tableau, et j'obtient ca :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    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
    tab[page] = 3
    tab[nbparpage] = 30
    tab[corps] =
    tab[entete] =
    tab[pok] =
    tab[corps][val_max_credit] = undefined
    tab[corps][val_carton] = undefined
    tab[corps][nb_joueur] = undefined
    tab[corps][nb_carton] = undefined
    tab[corps][gain_max] = undefined
    tab[corps][txq1] = undefined
    tab[corps][txq2] = undefined
    tab[corps][txdq] = undefined
    tab[corps][txcp] = undefined
    tab[entete][val_max_credit] = undefined
    tab[entete][val_carton] = undefined
    tab[entete][nb_joueur] = undefined
    tab[entete][nb_carton] = undefined
    tab[entete][gain_max] = undefined
    tab[entete][txq1] = undefined
    tab[entete][txq2] = undefined
    tab[entete][txdq] = undefined
    tab[entete][txcp] = undefined
    tab[pok][nom] = undefined
    tab[pok][prenom] = undefined
    tab[pok][mail] = undefined
     
     
    il y a 2 attributes
      attribut 0 |page : 3
      attribut 1 |nbparpage : 30
    il y a 3 childNodes
    childnode 0
    il y a 9 attributes
      attribut 0 |val_max_credit : 100.00
      attribut 1 |val_carton : 3.00
      attribut 2 |nb_joueur : 200
      attribut 3 |nb_carton : 13
      attribut 4 |gain_max : 20.00
      attribut 5 |txq1 :
      attribut 6 |txq2 :
      attribut 7 |txdq :
      attribut 8 |txcp :
    childnode 0 terminé
    childnode 1
    il y a 9 attributes
      attribut 0 |val_max_credit : Valeur maximum de credit
      attribut 1 |val_carton : Val Carton
      attribut 2 |nb_joueur : Nombre Joueurs
      attribut 3 |nb_carton : Nombre de cartons
      attribut 4 |gain_max : Gain maximum
      attribut 5 |txq1 : Taux simple quine 1
      attribut 6 |txq2 : Taux simple quine 2
      attribut 7 |txdq : Taux double quine
      attribut 8 |txcp : Taux carton plein
    childnode 1 terminé
    childnode 2
    il y a 3 attributes
      attribut 0 |nom : Martin
      attribut 1 |prenom : Bob
      attribut 2 |mail : [email protected]
    childnode 2 terminé
    Donc en fait tant que je suis a l'interieur des fonctions je vois bien une valeur dans les nodesValue, mais je n'arrive pas a les stocker dans le tableau ...

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Les meilleurs livres pour apprendre le JavaScript
    Par vermine dans le forum Livres
    R�ponses: 23
    Dernier message: 10/06/2019, 18h58
  2. Cours : algorithmes et r�cursivit�
    Par Community Management dans le forum Algorithmes et structures de donn�es
    R�ponses: 3
    Dernier message: 17/10/2018, 00h38
  3. JavaScript<---->ActionScript
    Par crazypiou dans le forum Flash
    R�ponses: 21
    Dernier message: 17/04/2009, 17h14
  4. appel xmlservice via fonction javascript
    Par pram dans le forum XMLRAD
    R�ponses: 2
    Dernier message: 06/05/2003, 14h24
  5. JavaScript de v�rification de formulaire
    Par [DreaMs] dans le forum XMLRAD
    R�ponses: 6
    Dernier message: 26/02/2003, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo