Lecture et Écriture dans un fichier xml et affichage dans un DataGridView
Bonjour,
J'ai un fichier xml sous cette forme la :
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
|
<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:
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:
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:
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.