Bonjour,

J'ai un fichier xml sous cette forme la :

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
 
<standard_set name="NIST Standards">
   <standard name="NIST SRM 610">
     <concentration compound="Li" units="ppm">484.6</concentration> 
     <concentration compound="Be" units="ppm">465.6</concentration> 
     <concentration compound="B" units="ppm">356.4</concentration> 
     <concentration compound="C" units="ppm">0.1</concentration> 
     <concentration compound="Na" units="ppm">99052.840104</concentration> 
     <concentration compound="Mg" units="ppm">465.3</concentration> 
     <concentration compound="Al" units="ppm">10791.413617</concentration> 
     <concentration compound="Si" units="ppm">327090.72015</concentration> 
     <concentration compound="P" units="ppm">342.5</concentration>
     ....
   </standard>
   <standard name="NIST SRM 610 (Pearce et al, 1997)">
     <concentration compound="Li" units="ppm">482.20</concentration> 
     <concentration compound="Be" units="ppm">460.70</concentration> 
     <concentration compound="B" units="ppm">357.60</concentration> 
     <concentration compound="Na" units="ppm">97190.21</concentration> 
     <concentration compound="Mg" units="ppm">455.00</concentration> 
     <concentration compound="Al" units="ppm">10053.47</concentration>
      ...
   </standard>
   <standard name="NIST SRM 612">
   .....
et je souhaiterais pourvoir afficher le contenu de celui-ci (compound, units et valeurs) dans un tableau et permettre par la suite l'ajout, la suppression et la modification des valeurs de ce fichiers, qui seront ensuite enregistrées. J'ai donc opté pour un datagridview.

Pour afficher dans le datagridview, j'ai ce code la qui fonctionne correctement et qui me permet d'afficher seulement certains noeuds :

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
 
        private void XML()
        {            
            XmlDataDocument xmlDatadoc = new XmlDataDocument();
 
            xmlDatadoc.DataSet.ReadXml(file_Name);
 
            DataSet ds = new DataSet();
 
            ds = xmlDatadoc.DataSet;
 
            dataGridView1.DataSource = ds;
 
            dataGridView1.DataMember = "standard";
        }
Cependant cela me renvoie tout les noeuds du type demandé et je n'ai pas réussis à récupérer simplement les valeurs des noeuds enfants d'un noeud standard choisis.

Après recherches, je me suis donc tourné vers Xpath. Ceci m'as permis de récupérer le contenu des noeuds que je désirais ainsi que des noeuds enfants concernés.

En revanche, je n'arrive pas à trouver comment récupérer les valeurs des attributs "compound" et "units".

J'utilise ces expressions XPath pour parcourir mon fichier xml :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
// Expression pour parcourir le noeud donné
ExpXPath = "//standard[@name='" + standard + "']";
 
// Expression pour récupérer le nombre de noeuds enfants contenu dans le noeud donné
ExpXCount = "//standard[@name='" + standard + "']/concentration";
 
// Expression pour récupérer les valeurs de compound
ExpXName = "//standard/concentration./@compound";
Mais en utilisant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 Name = Navigator_Name.Select(Navigator_Name.Compile(ExpXName));
Console.WriteLine(Name.Current.Value);
cela me renvoie les valeurs de tout les noeuds enfants du noeud actuel.

Si quelqu'un a une idée/solution, je suis preneur.

Merci d'avance.