Bonjour,
Malgrès mes recherches sur le forum, je n'ai rien trouvé....
Je travaille sur un projet ou je dois transformer du XML pour en faire un formulaire. Ca ressemble un peu aux principe des décorateurs... Chaque feuille de l'arbre XML est récupérée, analysée puis ça génère un élément html (avec toutes les options qui vont bien...).
Un script php génère le xml, et je le récupère avec ajax. Pas de problème avec la récupération du fichier XML.
Mon problème se situe plutôt dans le code:
Tout d'abord mon algorithme récursif. J'ai l'impression qu'il est correct, mais il m'affiche quelque chose de bizarre:
Le alert est :"Userprefs a 9 fils", sauf que la racine a 4 fils directs (et bien sur apres elle a des petits fils.
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 function traiter(racine){ //si l'element est une feuille, alors on peut la "décorer" if (estFeuille(racine)) { var element=decorer(racine) l_s+=element; } else { //si ce n'est pas une feuille, on creer la balise ouvrante: l_s+=baliseOuvreFerme(racine,'open'); //recuperations des fils var nbfils = racine.childNodes.length; var fils=racine.childNodes; alert(racine.nodeName+" a"+nbfils+" fils: "); for(var i = 0; i<nbfils; i++){ var element = fils[i].item(0); traiter(element); } //balise fermante l_s+=baliseOuvreFerme(racine,'close'); } }
De plus, lorsque j'essaye d'accéder a un attribut d'un fils (par exemple element.getAttribute('datatype')), Firebug répond que ce n'est pas une fonction.
Du coup je suis un peu perdu, soit le fichier xml est invalide (malgrès les validations...), soit j'écris une erreur quelque part....
Pour info voici le début de la fonction décorer:
Enfin voici le fichier xml que je souhaite analyser (on remarque que Userprefs (la racine) a bien 4 fils (et non pas neuf):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 function decorer(node){ var datatype=racine.getAttribute("datatype");//Erreur !!! .....
D'après vous qu'est-ce qui irait pas ?
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 <UserPrefs> <UserPref name="rssurl" datatype="string" default_value="" display_name="URL du Flux : "/> <UserPref name="nb" datatype="string" default_value="5" display_name="Nombre d'article : "/> <UserPref name="affichage" datatype="enum" default_value="classique" display_name="Type d'affichage : "> <EnumValue value="classique" display_value="Classique"/> <EnumValue value="agenda" display_value="Agenda"/> <EnumValue value="slideshow" display_value="Slideshow"/> <EnumValue value="ticker" display_value="Ticker"/> </UserPref> <UserPref name="fieldset1" display_name="Options supplémentaires" datatype="fieldset" default_value="" display_default="hidden"> <UserPref name="desactivecache" datatype="checkbox" default_value="" display_name="Désactiver le cache : "/> <UserPref name="h" datatype="string" default_value="" display_name="Hauteur : "/> <UserPref name="w" datatype="string" default_value="" display_name="Largeur : "/> <UserPref name="css" datatype="string" default_value="" display_name="URL d'une CSS : "/> <UserPref name="himg" datatype="string" default_value="" display_name="Hauteur des vignettes : "/> <UserPref name="wimg" datatype="string" default_value="" display_name="Largeur des vignettes : "/> </UserPref> </UserPrefs>
par avance je vous remercie.
Partager