Fonction récursive de parcours d'un arbre xml qui boucle indéfiniment

Fonction récursive de parcours d'un arbre xml qui boucle indéfiniment - HTML/CSS - Programmation

Marsh Posté le 15-04-2009 à 13:58:26    

Bonjour, j'ai une fonction récursive de parcours d'un arbre xml (j'ai enlevé tout le superflu pour le problème) :
 

Code :
  1. function travelTree(root){
  2.   for (i = 0; i < root.childNodes.length; i++) {
  3.   travelTree(root.childNodes.item(i));
  4.   }
  5. }


 
Mon problème c'est qu'elle boucle indéfiniment.  je ne vois pas du tout pourquoi, surtout que dans firedebug l'arbre dom du xml est bien fini.
 
Ai-je oublié quelque chose ?
Merci d'avance.
 
Siron

Reply

Marsh Posté le 15-04-2009 à 13:58:26   

Reply

Marsh Posté le 15-04-2009 à 14:33:40    

Ce code parait correct. Donc le problème se situe peut-être dans le "superflu" qui a été enlevé.

Reply

Marsh Posté le 15-04-2009 à 14:58:24    

J'ai également testé en enlevant le superflu, et c'est pareil.
C'est quand j'itère sur les noeuds de type 1 que le problème arrive (en gros sur les noeuds non terminal, mais si je les prends pas je descends pas dans l'arbre).

Reply

Marsh Posté le 15-04-2009 à 15:35:48    

J'ai solutionné le problème en passant via un debogueur, en fait il tournait en boucle sur une branche, la solution c'est :

 
Code :
  1. function travelTree(root){
  2.   borne = root.childNodes.length;
  3.   for (i = 0; i<borne; i++) {
  4.     travelTree2(root.childNodes.item(i));
  5.   }
  6. }
 

Mais je ne comprends pas pourquoi le fait de laisser le root.childNodes.length dans la condition du for provoque un problème, ça m'intrigue et m'inquiète.


Message édité par Siron le 15-04-2009 à 15:36:17
Reply

Marsh Posté le 15-04-2009 à 17:34:41    

J'ai parlé trop vite, si ça ne boucle plus indéfiniment, l'appel de la fonction casse la boucle for, donc je ne parcours qu'une seule branche de l'arbre.
C'est assez déconcertant comme comportement, il n'y a pourtant rien de particulier.

Reply

Marsh Posté le 15-04-2009 à 21:41:32    

Bon j'ai trouvé : il faut mettre un ***** de var devant chaque variable déclarée (y compris dans le for), sinon c'est une variable globale automatiquement.
 :o  :o  :o  :o

Reply

Marsh Posté le 16-04-2009 à 09:14:15    

Oui, tout s'explique (et j'aurais dû le voir parce que j'ai déjà eu un problème avec ça).
En tous cas, merci d'avoir posté la réponse et bonne continuation.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed