Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/12/2011, 15h22   #1
Membre du Club
 
Inscription : février 2005
Messages : 358
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 358
Points : 61
Points : 61
Envoyer un message via MSN à Zebulon777
Par défaut Lecture d'un fichier XML impossible.

Bonjour tout le monde,

J'ai ce type de fichier XML
Code :
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 :
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.
__________________
Zeb'...
Zebulon777 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 15h33   #2
Membre du Club
 
Inscription : février 2005
Messages : 358
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 358
Points : 61
Points : 61
Envoyer un message via MSN à Zebulon777
Bon, j'ai résolu le premier problème en faisant un autre fichier XML :

Code :
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 ?
__________________
Zeb'...
Zebulon777 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 16h58   #3
Membre expérimenté
 
Avatar de tigunn
 
Homme
Développeur de bug
Inscription : janvier 2003
Messages : 520
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur de bug

Informations forums :
Inscription : janvier 2003
Messages : 520
Points : 536
Points : 536
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.
__________________
"le rhume distillation - L’estomac est la cucurbite, le cerveau le chapiteau, & le nez le réfrigérant par lequel s’écoule goutte à goutte le produit de la distillation."
de Avicenne

Le monde se divise en deux: ceux qui utilisent le tag et les autres.

Un problème? venez en découdre!
tigunn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2011, 15h26   #4
Membre du Club
 
Inscription : février 2005
Messages : 358
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 358
Points : 61
Points : 61
Envoyer un message via MSN à Zebulon777
Ho puré, j'ai rien compris et en plus je n'ai pas réussit à trouver des exemples de codes sur le site...
__________________
Zeb'...
Zebulon777 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 11h21   #5
Membre du Club
 
Inscription : février 2005
Messages : 358
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 358
Points : 61
Points : 61
Envoyer un message via MSN à Zebulon777
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.
__________________
Zeb'...
Zebulon777 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 12h33   #6
Expert Confirmé Sénior
 
Inscription : septembre 2004
Messages : 5 092
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 092
Points : 7 019
Points : 7 019
À 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 :
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.
thelvin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 13h24   #7
Membre du Club
 
Inscription : février 2005
Messages : 358
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 358
Points : 61
Points : 61
Envoyer un message via MSN à Zebulon777
Merci de ta réponse.
J'ai donc modifier mon XML en fonction des tes conseils.
Code :
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.
__________________
Zeb'...
Zebulon777 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 10h22   #8
Membre du Club
 
Inscription : février 2005
Messages : 358
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 358
Points : 61
Points : 61
Envoyer un message via MSN à Zebulon777
Je vous embête encore, mais je craque.
Code :
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" ?
__________________
Zeb'...
Zebulon777 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 13h08   #9
Membre éclairé
 
Avatar de hariman
 
Homme Luc Hariman RANDRIANOMENJANAHARY
Développeur Java
Inscription : janvier 2008
Messages : 175
Détails du profil
Informations personnelles :
Nom : Homme Luc Hariman RANDRIANOMENJANAHARY
Localisation : Ile Maurice

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

Informations forums :
Inscription : janvier 2008
Messages : 175
Points : 349
Points : 349
Envoyer un message via MSN à hariman Envoyer un message via Skype™ à hariman
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 :
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>
hariman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 13h41   #10
Membre du Club
 
Inscription : février 2005
Messages : 358
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 358
Points : 61
Points : 61
Envoyer un message via MSN à Zebulon777
Merci de ta réponse.

Voila ce que je fais et qui ne fonctionne pas.

Code :
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 ?
__________________
Zeb'...
Zebulon777 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 15h01   #11
Membre éclairé
 
Avatar de hariman
 
Homme Luc Hariman RANDRIANOMENJANAHARY
Développeur Java
Inscription : janvier 2008
Messages : 175
Détails du profil
Informations personnelles :
Nom : Homme Luc Hariman RANDRIANOMENJANAHARY
Localisation : Ile Maurice

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

Informations forums :
Inscription : janvier 2008
Messages : 175
Points : 349
Points : 349
Envoyer un message via MSN à hariman Envoyer un message via Skype™ à hariman
As-tu déjà essayé SelectSingleNode() avec ce paramètre ?

Code :
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 ?
hariman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 09h44   #12
Membre du Club
 
Inscription : février 2005
Messages : 358
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 358
Points : 61
Points : 61
Envoyer un message via MSN à Zebulon777
Oui et j'obtiens un message d'erreur "Cet objet ne gère pas cette propriété ou cette méthode".

Code :
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");
__________________
Zeb'...
Zebulon777 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 10h21   #13
Membre éclairé
 
Avatar de hariman
 
Homme Luc Hariman RANDRIANOMENJANAHARY
Développeur Java
Inscription : janvier 2008
Messages : 175
Détails du profil
Informations personnelles :
Nom : Homme Luc Hariman RANDRIANOMENJANAHARY
Localisation : Ile Maurice

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

Informations forums :
Inscription : janvier 2008
Messages : 175
Points : 349
Points : 349
Envoyer un message via MSN à hariman Envoyer un message via Skype™ à hariman
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.
hariman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 10h54   #14
Membre du Club
 
Inscription : février 2005
Messages : 358
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 358
Points : 61
Points : 61
Envoyer un message via MSN à Zebulon777
Ho purée ! C'était ça.
J'étais totalement passé à coté.
Merci beaucoup.
__________________
Zeb'...
Zebulon777 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h01.


 
 
 
 
Partenaires

Hébergement Web