Bonjour,
Comme le titre l'indique, comment pourrais-je faire pour exploiter les données extraites d'un fichier XML pour les stocké dans un tableau ou DataSet?
Quelqu'un a une idée?
Merci
Bonjour,
Comme le titre l'indique, comment pourrais-je faire pour exploiter les données extraites d'un fichier XML pour les stocké dans un tableau ou DataSet?
Quelqu'un a une idée?
Merci
je suppose que tu charge tes données XML dans un XMLDocument. a l'aide d'une instruction Xpath tu récupère les nœuds dans un XMLNodeList ensuite tu boucle sur le XMLNodeList, tu récupère les données et tu charge dans ton tableau ou DataSet.
@++
Je récupère mes valeurs ( des noeuds ) avec le code suivant :
Premièrement, c'est que je n'arrive pas à tout parcourir les noeuds, ya des noeuds vers la fin du fichier XML je n'ai plus de messages box, on dirait la fin du fichier même si c pas le cas ( normalement en Xpath .//* me donnera tout les noeud sans distinction non ? )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Dim xpathDoc As XPathDocument Dim xNavigator As XPathNavigator Dim xNodeIterator As XPathNodeIterator xpathDoc = New XPathDocument("c:\Test_1.xml") xNavigator = xpathDoc.CreateNavigator() xNodeIterator = xNavigator.Select(".//*") While (xNodeIterator.MoveNext()) MessageBox.Show(xNodeIterator.Current.Name + " : " + xNodeIterator.Current.Value) End While
Deuxièment, pour récupèrer ça dans un tableau? je dois récupérer les valeurs dans une variable puis un tableau ? je ne vois pas bien
Merci
Bonsoir, je dis peut-être une bêtise mais pourquoi ne pas essayer de récupérer les valeurs avec une requête linq ?
Salut Jean-Michel Ormes,
Merci, oui pourquoi pas! tu peux m'eguiller plus?
Salut,
Une requête linq fonctionne comme une requête SQL. Au vu de ton code, je dirais que tu peux essayer ça :
Ensuite, tu peux réutiliser la variable requête dans un foreach pour remplir ton tableau en fonction de tes noeuds.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 var requete = from s in xpathDoc.Descendants("test") // Exemple de requête select s;
PS : Il faut que tu rajoute des références à ton code (System; System.Linq; System.Xml.Linq
tssi555
en Xpath .//* retourne tout les noeuds sans distinction en partant du contexte actuelle donc s'il y'a des noeuds qui ne font pas partir de ce contexte c'est normal que tu ne puisse pas lire ceux-ci.
Jean-Michel Ormes
A ce que je sache le XpathDocument n'a pas une méthode Descendants()
@++
Oui exact lilroma. Mais avec un XElement ça marche il me semble.
Merci à vous deux,
Ce que je veux exactement, c'est de pouvoir lire mon fichier XML ( j'arrive à le parcourir ) et stocker les valeurs (en faisant la distinction entre tout les noeuds) soit dans un tableau soit dans un data set puis les afficher dans un datagridview, cette derniere solution sera l'idéale.
Fait voir le code que tu utilise pour parcourir ton fichier XML
@++
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Dim xpathDoc As XPathDocument Dim xNavigator As XPathNavigator Dim xNodeIterator As XPathNodeIterator xpathDoc = New XPathDocument("c:\test_1.xml") xNavigator = xpathDoc.CreateNavigator() xNodeIterator = xNavigator.Select(".//*") While (xNodeIterator.MoveNext()) MessageBox.Show(xNodeIterator.Current.Name + " : " + xNodeIterator.Current.Value) End While
Encore un autre pas en avant de fait,
maintenant, j'arrive à charger le DataSet par les données du fichiers XML puis afficher tout ca dans un DataGridView, le problème c'est que j'ai que le premier contexte avec ses Nodes-Childs et donc une seule ligne dans le datagridview
Je veux parcourir tout le fichier xml et avoir tout les données pour les afficher dans le gridview et pas seulement une partie.
Mon code est le suivant :
Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Dim xmlDatadoc As New XmlDataDocument() xmlDatadoc.DataSet.ReadXml("C:\test_1.xml") Dim ds As New DataSet("ds_LoadXML") ds = xmlDatadoc.DataSet frmLoadXML.DataGridView1.DataSource = ds.DefaultViewManager frmLoadXML.DataGridView1.DataMember = "import_batch" frmLoadXML.Show()
Dans ce cas tu ne doit pas passer par le Binding, puisque chaque contexte peut avoir sa propre structure XML c'est pour cella que c'est un seul contexte (par défaut le contexte courant) qui est charger dans le DGV.
Et pour la lecture dans l'instruction Xpath je crois tu sera obliger a chaque de définir le contexte.
@++
Merci, mais si tu veux bien me donner un exemple concret suite à mon code pour les deux cas que tu viens d'expliquer.
Les deux solutions m'interesses, mais comme c ma première manipulation je ne vois pas bien comment faire.
Ok fait voir la structure de ton fichier XML pour que je puisse l'adapter a ton cas.
@++
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93<?xml version="1.0" ?> - <ASREQUEST_CIC_ASC> - <AS_REQUEST> - <ASREQUEST_INFO> <COMPANY>ZZZZ</COMPANY> <JOB_NO /> <ASC_CODE /> - <PRODUCT> - <PRODUCTSHORT> <MODEL_CODE /> <SERIAL_NO /> <PURCHASE_DATE /> </PRODUCTSHORT> - <SYMPTOM> <SYMPTOM1_DESC /> <SYMPTOM2_DESC /> <SYMPTOM3_DESC /> </SYMPTOM> </PRODUCT> - <SERVICE> <SERVICE_TYPE /> <SERVICE_TYPE_DESC /> </SERVICE> <IN_OUT_WARRANTY /> <REQUEST_DATE /> <REQUEST_TIME /> <REPAIR_ETD_DATE /> <REPAIR_ETD_TIME /> - <TRACKING> <TR_STATUS /> <TR_STATUS_DESC /> </TRACKING> - <TRREASON> <TR_REASON /> <TR_REASON_DESC /> </TRREASON> <INQUIRY_TEXT /> <REF_NO /> </ASREQUEST_INFO> - <CONSUMER_INFO> <BP_NO>EMPTY</BP_NO> - <CUSTNAME> <TITLE /> <FIRST_NAME /> <LAST_NAME /> </CUSTNAME> - <PHONE> <TEL_NUMBER1 /> <TEL_NUMBER2 /> <TEL_NUMBER3 /> <FAX_NUMBER /> <E_MAIL /> </PHONE> - <ADDRESS> <ADDRESS_NUMBER /> <COUNTRY /> <REGION /> <POST_CODE /> <CITY /> <STREET /> <HOUSE_NUMBER /> <ROOM_NUMBER /> <FLOOR /> </ADDRESS> </CONSUMER_INFO> - <DEALER_INFO> <BP_NO>EMPTY</BP_NO> - <CUSTNAME> <TITLE /> <FIRST_NAME /> <LAST_NAME /> </CUSTNAME> - <PHONE> <TEL_NUMBER1 /> <TEL_NUMBER2 /> <TEL_NUMBER3 /> <FAX_NUMBER /> <E_MAIL /> </PHONE> - <ADDRESS> <ADDRESS_NUMBER /> <COUNTRY /> <REGION /> <POST_CODE /> <CITY /> <STREET /> <HOUSE_NUMBER /> <ROOM_NUMBER /> <FLOOR /> </ADDRESS> </DEALER_INFO> </AS_REQUEST> </ASREQUEST_CIC_ASC>
Ce que tu a poster je ne voie qu'un seul contexte si ta plusieurs nœuds
Ce que tu va faire c'est ajouter une balise globalisante et le nœud ci-dessus serons des nœuds enfant. La tu va te retrouver avec un seul contexte et ainsi pouvoir charger toute tes données dans le DataSet et le DGV.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <ASREQUEST_CIC_ASC> </ASREQUEST_CIC_ASC>
@++
Bah non!! pourquoi un seul contexte ?
Ya aussi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <AS_REQUEST> </AS_REQUEST>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <PRODUCT> </PRODUCT>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <PRODUCTSHORT> </PRODUCTSHORT>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <SYMPTOM> </SYMPTOM>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <SERVICE> </SERVICE>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <TRACKING> </TRACKING>Et bien tout les autres noeuds et noeuds-enfants contenus dans le fichier soulevé ci-dessus!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 .... ....
Tout ça entre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <ASREQUEST_CIC_ASC> </ASREQUEST_CIC_ASC>
C'est juste ils ne contiennent pas de valeurs ou contiennent une chaine vide entre les balises c'est tout et pas qu'il y'a un seul contexte dans le fichier.
Bonjour,
Pour finir, je charge mes données XML dans un DataSet (et pas dans un simple tableau ) puis je les affiches dans un DataGridView, c'est plus pratique et plus facile de les exploiter par la suite.
Je donne le lien de la msdn au cas cela pourra aider quelqu'un
http://msdn.microsoft.com/en-us/library/ekw4dh3f.aspx
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager