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 :

Parcours XML recursif


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 68
    Par défaut Parcours XML recursif
    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:

    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');
     
    		}
    	}
    Le alert est :"Userprefs a 9 fils", sauf que la racine a 4 fils directs (et bien sur apres elle a des petits fils.

    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:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function decorer(node){
     
    		var datatype=racine.getAttribute("datatype");//Erreur !!!
    .....
    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
    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>
    D'après vous qu'est-ce qui irait pas ?

    par avance je vous remercie.

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Salut,
    Malgrès mes recherches sur le forum, je n'ai rien trouvé....
    C'est que tu n'as pas cherché dans la FAQ
    Cependant, pour ce que tu fais, il serait probablement plus simple d'utiliser une feuille de style XSLT et d'intégrer directement le tout dans le DOM
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 68
    Par défaut
    Salut Bovino,

    J'avais pourtant lu la FAQ, j'avais conscience de ce problème d'espaces blancs, mais cela dit, je n'avais pas tilté, pensant qu'il s'agissait d'autre chose.

    Quant à la proposition du XLST, je vais étudier ça de prêt...

    Merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#][XML] parcours XML débutant
    Par loic_86 dans le forum C#
    Réponses: 5
    Dernier message: 03/04/2011, 12h46
  2. Sérialiser Object en XML Recursif
    Par Soulama dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 27/05/2008, 14h06
  3. [DOM] Parcours XML
    Par speedev dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/11/2007, 12h16
  4. actionScript classe parcours XML
    Par LeXo dans le forum Flash
    Réponses: 2
    Dernier message: 26/06/2007, 16h06
  5. Parcours xml
    Par jeff_! dans le forum Général JavaScript
    Réponses: 21
    Dernier message: 30/11/2005, 17h08

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