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 :

Lecture d'un fichier XML impossible.


Sujet :

JavaScript

  1. #1
    Membre actif Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 320
    Points : 286
    Points
    286
    Par défaut Lecture d'un fichier XML impossible.
    Bonjour tout le monde,

    J'ai ce type de fichier XML
    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
     
    <?xml version="1.0" encoding="ISO-8859-1" ?> 
    <VOLS>
    	<LISTE>
    		<2011_01_01>
    			<NB_TRAJ>10</NB_TRAJ>
    			<TOT_TRAJ>100</TOT_TRAJ>
    		</2011_01_01>
    		<2011_01_02> 
    			<NB_TRAJ>20</NB_TRAJ>
    			<TOT_TRAJ>200</TOT_TRAJ>
    		</2011_01_02>
    		<2011_01_03> 
    			<NB_TRAJ>30</NB_TRAJ>
    			<TOT_TRAJ>300</TOT_TRAJ>
    		</2011_01_03>
    	</LISTE>
    </VOLS>
    Mais lorsque j'essaye de le lire, ça ne fonctionne pas.
    J'ai toujours l'erreur "L'expression ne renvoie pas un noeud DOM"

    Voici mon code :
    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
     
    	var WNoeud_MOIS = "VOLS/LISTE/*";
    	var WNoeud_Val1 = "VOLS/LISTE/" + P_Annee + "_" + P_Mois + "_" + P_Jour + "/NB_TRAJ";
    	var WNoeud_Val2 = "VOLS/LISTE/" + P_Annee + "_" + P_Mois + "_" + P_Jour + "/TOT_TRAJ";
     
    	WNomFichierXML = G_RepXML + "Vols_" + P_Annee + ".xml";
    	var XML_Vols = new ActiveXObject("Microsoft.xmldom");
    	XML_Vols.async = false;
    	WFichier = G_RepXML + WNomFichierXML;
    	WFichierXML = XML_Vols.load(WFichier);
     
    	WVal1 = XML_Vols.selectNodes(WNoeud_Val1).text;
    	WVal2 = XML_Vols.selectNodes(WNoeud_Val2).text;
     
    	alert(WVal1 + G_CrLf + WVal2);
    Mais, je ne vois pas ce qui ne fonctionne pas ?

    Merci d'avance pour votre aide.

  2. #2
    Membre actif Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 320
    Points : 286
    Points
    286
    Par défaut
    Bon, j'ai résolu le premier problème en faisant un autre fichier XML :

    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
     
    <?xml version="1.0" encoding="ISO-8859-1" ?> 
    <VOLS>
    	<LISTE>
    		<M20110101>
    			<NB_TRAJ>10</NB_TRAJ>
    			<TOT_TRAJ>100</TOT_TRAJ>
    		</M20110101>
    		<M20110102> 
    			<NB_TRAJ>20</NB_TRAJ>
    			<TOT_TRAJ>200</TOT_TRAJ>
    		</M20110102>
    		<M20110103> 
    			<NB_TRAJ>30</NB_TRAJ>
    			<TOT_TRAJ>300</TOT_TRAJ>
    		</M20110103>
    	</LISTE>
    </VOLS>
    Par contre, je voudrai savoir comment se positionner directement sur un noeud donné, par exempe, récupérer les valeurs du 21/07/2011 ?
    Est-ce que ce sera rapide lorsque l'année sera complète ?
    Est-ce que vous coryez qu'il est raisonnable de traiter plusieurs années dans le même fichier ?
    Bref, que me conseillez-vous ?

  3. #3
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    Pour accéder directement à un noeud particulier, regarde les tutos sur Xpath .
    Sinon, pour la question des charges, je ne saurais dire : il faudrait mieux que tu teste; toutefois, pour info, il existe des bdd xml comme Exist-Db (gratuit) qui permet de définir des index. Exist a des performances correctes, voir bonnes.

  4. #4
    Membre actif Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 320
    Points : 286
    Points
    286
    Par défaut
    Ho puré, j'ai rien compris et en plus je n'ai pas réussit à trouver des exemples de codes sur le site...

  5. #5
    Membre actif Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 320
    Points : 286
    Points
    286
    Par défaut
    Bon, ben je suis dans le caca, je n'arrive vraiment pas à me positionner directement sur le bon noeud en fonction de la date saisie.

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 560
    Points : 21 622
    Points
    21 622
    Par défaut
    À ta place j'utiliserais jQuery.

    J'ai trouvé un tutoriel de parcours de XML avec jQuery, et en le lisant, lui et la documentation de jQuery, notamment ce qui concerne la navigation dans le XML et les sélecteurs CSS gérés, on peut s'en sortir sans trop de problèmes.

    Mais 'faut que tu saches que ton XML est très mauvais. Il vaudrait mieux quelque chose genre :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="ISO-8859-1" ?> 
    <vols>
      <liste>
        <date for="20110101">
          <nb_traj>10</nb_traj>
          <tot_traj>100</tot_traj>
        </date>
        <date for="20110102">
          <nb_traj>20</nb_traj>
          <tot_traj>200</tot_traj>
        </date>
      </liste>
    </vols>

    Les balises ont le même nom, c'est l'attribut qui change. C'est prévu pour marcher comme ça.
    Aussi, l'usage est aux balises en minuscule, mais ça marche aussi en majuscules.

  7. #7
    Membre actif Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 320
    Points : 286
    Points
    286
    Par défaut
    Merci de ta réponse.
    J'ai donc modifier mon XML en fonction des tes conseils.
    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
     
    <?xml version="1.0" encoding="ISO-8859-1" ?> 
    <VOLS>
         <LISTE>
              <DATE for="20110101">
                   <NB_TRAJ>10</NB_TRAJ>
                   <TOT_TRAJ>100</TOT_TRAJ>
              </DATE>
              <DATE for="20110102">
                   <NB_TRAJ>20</NB_TRAJ>
                   <TOT_TRAJ>200</TOT_TRAJ>
              </DATE>
              <DATE for="20110103">
                   <NB_TRAJ>30</NB_TRAJ>
                   <TOT_TRAJ>300</TOT_TRAJ>
              </DATE>
         </LISTE>
    </VOLS>

    Je dois avouer que je ne m'en sors pas avec le JQuery !
    Je compose ma date, mais je n'arrive pas à pointer directement sur le bon noeud.
    Je ne suis vraiment pas fan du JQuery.
    Est-ce qu'il n'y aurait pas un moyen en Javascript pur ?
    (De plus, cette application doit fonctionner sur pas mal de micros différents, et pour des pays différents, je ne veux donc pas trop compliquer les choses ; ça l'est déjà assez comme ça... )

    Je sais que je pourrai utilisé une boucle pour parcourir le fichier, mais j'ai peur que ce soit très long.
    C'est pour cela que j'essaye d'accéder à une date donnée, directement.

  8. #8
    Membre actif Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 320
    Points : 286
    Points
    286
    Par défaut
    Je vous embête encore, mais je craque.
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    <?xml version="1.0" encoding="ISO-8859-1" ?> 
    <VOLS>
    	<DATES>
    		<LISTE>
    			<J20110101>
    				<JOUR>20110101</JOUR>
    				<NB_TRAJ>10</NB_TRAJ>
    				<TOT_TRAJ>100</TOT_TRAJ>
    			</J20110101>
    			<J20110102>
    				<JOUR>20110102</JOUR>
    				<NB_TRAJ>20</NB_TRAJ>
    				<TOT_TRAJ>200</TOT_TRAJ>
    			</J20110102>
    			<J20110103>
    				<JOUR>20110103</JOUR>
    				<NB_TRAJ>30</NB_TRAJ>
    				<TOT_TRAJ>300</TOT_TRAJ>
    			</J20110103>
    			<J20110104>
    				<JOUR>20110104</JOUR>
    				<NB_TRAJ>30</NB_TRAJ>
    				<TOT_TRAJ>300</TOT_TRAJ>
    			</J20110104>
    			<J20110105>
    				<JOUR>20110105</JOUR>
    				<NB_TRAJ>30</NB_TRAJ>
    				<TOT_TRAJ>300</TOT_TRAJ>
    			</J20110105>
    			<J20110106>
    				<JOUR>20110106</JOUR>
    				<NB_TRAJ>30</NB_TRAJ>
    				<TOT_TRAJ>300</TOT_TRAJ>
    			</J20110106>
    			<J20110107>
    				<JOUR>20110107</JOUR>
    				<NB_TRAJ>30</NB_TRAJ>
    				<TOT_TRAJ>300</TOT_TRAJ>
    			</J20110107>
    			<J20110108>
    				<JOUR>20110108</JOUR>
    				<NB_TRAJ>30</NB_TRAJ>
    				<TOT_TRAJ>300</TOT_TRAJ>
    			</J20110108>
    			<J20110109>
    				<JOUR>20110109</JOUR>
    				<NB_TRAJ>30</NB_TRAJ>
    				<TOT_TRAJ>300</TOT_TRAJ>
    			</J20110109>
    			<J20110110>
    				<JOUR>20110110</JOUR>
    				<NB_TRAJ>30</NB_TRAJ>
    				<TOT_TRAJ>300</TOT_TRAJ>
    			</J20110110>
    			<J20110111>
    				<JOUR>20110111</JOUR>
    				<NB_TRAJ>30</NB_TRAJ>
    				<TOT_TRAJ>300</TOT_TRAJ>
    			</J20110111>
    			<J20110112>
    				<JOUR>20110112</JOUR>
    				<NB_TRAJ>30</NB_TRAJ>
    				<TOT_TRAJ>300</TOT_TRAJ>
    			</J20110112>
    			<J20110113>
    				<JOUR>20110113</JOUR>
    				<NB_TRAJ>30</NB_TRAJ>
    				<TOT_TRAJ>300</TOT_TRAJ>
    			</J20110113>
    			<J20110114>
    				<JOUR>20110114</JOUR>
    				<NB_TRAJ>30</NB_TRAJ>
    				<TOT_TRAJ>300</TOT_TRAJ>
    			</J20110114>
    		</LISTE>
    	</DATES>
    </VOLS>
    Comment faire pour tester l’existence d'un noeud ?
    Lorsque je demande l'accès à une noeud qui n'existe pas, j'ai une erreur "Objet requis" ?

  9. #9
    Membre averti Avatar de hariman
    Homme Profil pro
    Développeur Java, Android
    Inscrit en
    Janvier 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Développeur Java, Android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 200
    Points : 413
    Points
    413
    Par défaut
    Bonjour,

    L'erreur "Objet requis" n'apparaît que si tu as utilisé un objet dont la valeur est nulle,
    donc l'erreur ne provient pas de l'appel de la fonction qui sert à récupérer le noeud

    Un simple test avec l'objet doit résoudre ton problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    <script type="text/javascript">
        ...
        // supposons que tu as récupéré le noeud dans une variable
     
        if (!noeud) {
            // le noeud n'existe pas
        }
        ...
    </script>

  10. #10
    Membre actif Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 320
    Points : 286
    Points
    286
    Par défaut
    Merci de ta réponse.

    Voila ce que je fais et qui ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    WDate = new String(P_Annee + P_Mois + P_Jour);
    Wnode = XML_Vols.SelectSingleNode("//VOLS//DATES//LISTE//J" + WDate + "//JOUR");
    if (Wnode != null)	
    {	
    	alert("existe");
    };
    else
    {
    	alert("existe pas");
    };
    Mais je ne vois pas du tout ce que je fais de mal ?

  11. #11
    Membre averti Avatar de hariman
    Homme Profil pro
    Développeur Java, Android
    Inscrit en
    Janvier 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Développeur Java, Android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 200
    Points : 413
    Points
    413
    Par défaut
    As-tu déjà essayé SelectSingleNode() avec ce paramètre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
         XML_Vols.SelectSingleNode("VOLS/DATES/LISTE/J" + WDate + "/JOUR");
    Sinon, quel est l'erreur affiché dans la console d'erreur de ton navigateur ?

  12. #12
    Membre actif Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 320
    Points : 286
    Points
    286
    Par défaut
    Oui et j'obtiens un message d'erreur "Cet objet ne gère pas cette propriété ou cette méthode".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	var XML_Vols = new ActiveXObject("Microsoft.xmldom");
    	XML_Vols.async = false;
    	WNomFichierXML = G_RepXML + "Vols_" + P_Annee + ".xml";
    	WFichierXML = XML_Vols.load(WNomFichierXML);
    	WDate = new String(P_Annee + P_Mois + P_Jour);
    	 WNode = XML_Vols.SelectSingleNode("VOLS/DATES/LISTE/J" + WDate + "/JOUR");

  13. #13
    Membre averti Avatar de hariman
    Homme Profil pro
    Développeur Java, Android
    Inscrit en
    Janvier 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Développeur Java, Android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 200
    Points : 413
    Points
    413
    Par défaut
    Corrige "SelectSingleNode" en "selectSingleNode".

    Comme le langage Javascript est proche de Java, les noms de méthodes doivent commencer par une lettre minuscule, et les classes par une majuscule.

  14. #14
    Membre actif Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 320
    Points : 286
    Points
    286
    Par défaut
    Ho purée ! C'était ça.
    J'étais totalement passé à coté.
    Merci beaucoup.

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

Discussions similaires

  1. Problème de lecture d'un fichier XML d'InfoPath
    Par snadus dans le forum InfoPath
    Réponses: 7
    Dernier message: 06/06/2006, 14h45
  2. Lecture d'un fichier XML de config avec Java
    Par cofy dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 31/01/2006, 15h54
  3. Problème de lecture dans un fichier xml
    Par Pyra dans le forum Langage
    Réponses: 2
    Dernier message: 18/12/2005, 00h13
  4. Probleme de lecture d'un fichier XML
    Par chleuh dans le forum Langage
    Réponses: 8
    Dernier message: 30/08/2005, 12h04
  5. [C#] [XML] Lecture d'un fichier XML => Combobox
    Par Chad`Chiwa dans le forum Windows Forms
    Réponses: 8
    Dernier message: 09/03/2005, 08h57

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