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 fichier xml


Sujet :

JavaScript

  1. #1
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut Parcours fichier xml
    Bonjour,
    ne pratiquant pas jusqu'à présent xml, je n'ai jamais utilisé les fonctions node et j'ai des soucis de compréhension, d'autant que je ne sais pas si mes problèmes viennent de ma mauvaise utilisation de Javascript ou de ma mauvaise création de fichier XML. Je m'explique : je souhaite "parser" un fichier xml que l'on va me fournir. Pour les besoins du test, j'en construit un à partir des meta tags du monde, par exemple :
    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
     
    <entete>
    <meta><robots><valeur data="INDEX"/><valeur data="FOLLOW"/><valeur data="NOARCHIVE"/></robots></meta>
    <meta><description><valeur data="LE MONDE, Journal Le Monde, quotidien d\'information francophone / Le Monde,    the french quality newspaper of record"/></description></meta>
    <meta>
    <keywords>
    <valeur data="LE MONDE"/>
    <valeur data=" INFORMATIONS"/>
    <valeur data=" INFOS"/>
    <valeur data=" QUOTIDIEN"/>
    <valeur data=" DAILY NEWS"/>
    <valeur data=" PRESSE"/>
    <valeur data=" PRESS"/>
    <valeur data=" NEWS"/>
    <valeur data=" FRANCE"/>
    <valeur data="    FRENCH"/>
    <valeur data=" DOSSIERS"/>
    <valeur data=" ECONOMIE"/>
    <valeur data=" ECONOMY"/>
    <valeur data=" CULTURE"/>
    <valeur data=" INTERNATIONAL"/>
    <valeur data=" BOURSE"/>
    <valeur data=" CINEMA"/>
    <valeur data=" MOVIES"/>
    <valeur data=" LIVRES"/>
    <valeur data=" BOOKS"/>
    <valeur data="    MULTIMEDIA"/>
    <valeur data=" EDUCATION"/>
    <valeur data=" FORUMS"/>
    <valeur data=" FORUM"/>
    <valeur data=" SERVICES"/>
    <valeur data=" ABONNEMENTS"/>
    <valeur data=" BOUTIQUE"/>
    <valeur data=" EMPLOI"/>
    <valeur data=" EXPOSITIONS"/>
    <valeur data=" FESTIVALS"/>
    <valeur data="    SPORT"/>
    <valeur data=" MAGAZINE"/>
    <valeur data=" EUROPEEN"/>
    <valeur data=" DIPLOMATIQUE"/>
    <valeur data=" PARTENAIRES"/>
    <valeur data=" PUBLICITE"/>
    <valeur data=" LETTRES D\'INFORMATIONS"/>
    <valeur data=" NEWSLETTERS"/>
    <valeur data="    JOURNAL EN LIGNE"/>
    <valeur data=" LE MONDE ON LINE"/>
    <valeur data=" VERSION PALM"/>
    <valeur data=" VERSION MOBILES"/>
    <valeur data=" MOBILE SERVICES"/>
    <valeur data=" METEO"/>
    <valeur data=" ARCHIVES"/>
    <valeur data="    DOCUMENTATION"/>
    <valeur data=" NOUVELLES TECHNOLOGIES"/>
    <valeur data=" HIGH TECH"/>
    <valeur data=" TRADUCTEUR"/>
    <valeur data=" TRANSLATOR"/></keywords></meta></entete>
    Je postule qu'il est correctement constitué puisque autant IE que FF arrivent à le lire sans m'insulter. MAis bon ... pouvez-vous le confirmer ?

    Une structure de type :

    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
     
    <metatags>
    <robots>
       <option>INDEX</option>
       <option>FOLLOW</option>
       <option>NOARCHIVE</option>
    </robots>
    <description>
       <lang xml:lang="fr">LE MONDE, Journal Le Monde, quotidien d'information francophone</lang>
       <lang xml:lang="en">Le Monde, 
      the french quality newspaper of record</lang>
    </description>
    <keywords>
      <keyword>LE MONDE</keyword>
      <keyword>INFORMATIONS</keyword>
      <keyword>INFOS</keyword>
      <keyword>QUOTIDIEN</keyword>
    </keywords>
    </metatags>
    a été "validée" ici http://www.developpez.net/forums/sho...d.php?t=150901

    Ensuite, je souhaite parcourir ce document, tel un singe moyen, passant de branche en branche, noeud par noeud pour reprendre les termes javascript mais la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function zz_affiche_datas(stream)
    {
      var vl_datas = stream;
      monfils=vl_datas.firstChild;
     
      alert("children.childNodes.length ->"+vl_datas.childNodes.length);
    me retourne toujours 1

    donc rien n'est renvoyé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            for(var i=0;i<monfils.childNodes.length;i++){
                nextNode = monfils.childNodes[i];
                alert("attributes.length ->"+nextNode.attributes.length);
                ...
            }
    ni
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while (monfils!=null) {
      alert(monfils.nodeName);
      monfils = monfils.nextSibling;
    }
    Je dois donc me mélanger les pinceaux avec les noeuds, attributs etc !! Je suis pommé, help
    Cordialement,
    Christophe Charron

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut lisibilité code
    (Re)

    Je pense que tu récupères <metatags> dans childNodes

    donc essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
     alert("children.childNodes[0].childNodes.length ->"+vl_datas.childNodes[0].childNodes.length);
    ensuite, pour le tag lang, il n'est là que si tu as besoin de séparer la description en anglais de celle en français (pour faire une selection par exemple) sinon ellees sont inutiles et peuvent être retirées
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    Citation Envoyé par Swoög
    (Re)

    Je pense que tu récupères <metatags> dans childNodes

    donc essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
     alert("children.childNodes[0].childNodes.length ->"+vl_datas.childNodes[0].childNodes.length);
    ensuite, pour le tag lang, il n'est là que si tu as besoin de séparer la description en anglais de celle en français (pour faire une selection par exemple) sinon ellees sont inutiles et peuvent être retirées
    Re,
    C'est en effet un bien meilleur début ...
    Je récupère en effet l'indication qu'il y a 3 noeuds et cerise sur le gateau,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert("Nom du second ->"+vl_datas.childNodes[0].childNodes[1].nodeName);
    me renvoie bien le bon nom de noeud.
    Je m'en vais donc,maintenant, tenter de parcourir et récupérer, aussi dynamiquement que possible le contenu et reviendrai poser la balise "résolu" quand je pourrai fournir un petit bout de code parsant le fichier.
    Cordialement,
    Christophe Charron

  4. #4
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    Citation Envoyé par Swoög
    (Re)

    Je pense que tu récupères <metatags> dans childNodes

    donc essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
     alert("children.childNodes[0].childNodes.length ->"+vl_datas.childNodes[0].childNodes.length);
    ensuite, pour le tag lang, il n'est là que si tu as besoin de séparer la description en anglais de celle en français (pour faire une selection par exemple) sinon ellees sont inutiles et peuvent être retirées
    Heu, pendant que j'y suis à abuser, personne n'aurait sous la main une petite fonction récursive permettant de parser le fichier ?

    Parce que il semblerait qu'il y ait un hic avec le booleen l'embryon de début de fonction étant

    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
    ...
    var vl_tetedenoeud = new DOMParser().parseFromString(xml, "text/xml");
    aa_parcours(vl_tetedenoeud);
    ...
    function aa_parcours(noeud)
    {
    //var vl_b_yadesfils = noeud.childNodes[0].hasChildNodes()
    var vl_e_nb_filiation = noeud.childNodes[0].childNodes.length;
    alert("Nombre de fils ->"+vl_e_nb_filiation);
    var vl_c_monfils=noeud.childNodes[0].childNodes[0];
    alert("Nom du premier ->"+vl_c_monfils.nodeName);
    var vl_e_nb_ptitfils=vl_c_monfils.childNodes.length;
    alert("Nombre de petit-fils ->"+vl_e_nb_ptitfils);
    var vl_c_monptifils;
    for(var i=0;i<vl_e_nb_ptitfils;i++)
     {
      vl_c_monptifils = vl_c_monfils.childNodes[i];
      alert("Petit-fils number"+(i+1)+" s\'appele "+vl_c_monptifils.nodeName+" et c\'est un drôle de type ->"+vl_c_monptifils.nodeType);
      try
        {if(vl_c_monfils.childNodes.length==0)
          {
            aa_parcours(vl_c_monptifils);
          }
        }
      catch(ex)
        { 
          alert("y'a pas de fils : noeud stérile");
        }
     }
    }
    Cordialement,
    Christophe Charron

  5. #5
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function analyse(node) {
       var i = 0;
       while (node.childsNodes[i])
       {
          var nd = node.childsNodes[i]
          // Fait ici ce que tu veux. Ex : analyse (nd);
          i++
       }
    }
    ???
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

Discussions similaires

  1. Parcours fichier XML
    Par ClineB dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 23/12/2013, 18h06
  2. Problème parcours fichier xml.
    Par imen1986 dans le forum APIs
    Réponses: 9
    Dernier message: 17/05/2010, 01h34
  3. Parcours fichier xml
    Par oclone dans le forum C#
    Réponses: 3
    Dernier message: 13/05/2009, 11h08
  4. Qt + parcours fichier xml
    Par sofuzion dans le forum Qt
    Réponses: 9
    Dernier message: 27/03/2009, 14h16
  5. [XPATH] parcours fichier xml : performances
    Par loic72 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 25/02/2008, 16h01

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