Récupération de tout les attributs dans un XML

cs_megamario Messages postés 145 Date d'inscription lundi 15 juin 2009 Statut Membre Dernière intervention 14 février 2013 - 17 janv. 2010 à 19:09
cs_megamario Messages postés 145 Date d'inscription lundi 15 juin 2009 Statut Membre Dernière intervention 14 février 2013 - 17 janv. 2010 à 19:32
Bonjour a tous,

Je suis a la rechercher d'un moyen pour recuperer tout les attributs que j'ai mis dans mon fichier XML
J'essaie actuelement de comprendre la navigation avec xpath.

Voici un bout de mon XML:

<?xml version= "1.0" encoding="utf-8"?>
<config>
<type version= "truc1">
<mesures>

<Nom>Mesure1</Nom>
<Obj>Bidule</Obj>
6
<Format>100</Format>
V


<Nom>mesure2</Nom>
<Obj>machin</Obj>
7
<Format>100</Format>
A

</mesures>
</type>
<type version ="truc2">
etc...

Voila ce que j'ai fait pour le moment je continu a chercher bien sur en même temps, mais j'ai pas trouvé pour faire une liste de ces attributs.
Autre question, peut t'on mettre 2 attributs. Si oui même question comment la recuperer? mais je pense que si j'arrive pour la 1ere je pourrai faire la 2eme.

 private void button4_Click(object sender, EventArgs e)
        {
            ArrayList values = new ArrayList();
            string[] Liste = new string[80];
            XPathDocument DocXML;
            XPathNavigator Navig;
            XPathNodeIterator MaNavi;
            int Nb = 0;
            int i = 0;
            DocXML = new XPathDocument("params.xml");
            Navig = DocXML.CreateNavigator();
            MaNavi = Navig.Select(Navig.Compile (".//type"));
            Nb = MaNavi.Count;
            if (MaNavi.Count != 0)
            {
                for (i = 0; i <= Nb ; i++)
                {
                    Liste[i] = MaNavi.Current.GetAttribute("version","");
                    MaNavi.Current.MoveToNext();
                    values.Add (Liste[i]);
                }
                listBox1.DataSource = values;
                

            }


En tout cas le MaNavi.Count me donne bien le nombre de nœud que j'ai.
Par contre la navigation d'un nœud à l'autre ne sa fait pas. J'ai toujours l'indication de la position = 0. Je suppose que position me donne bien ou se trouve mon "curseur" dans mon document par rapport au nœud choisis.

Technicien en électricité Industriel (39 ans), en cours de reconversion BTS IRIS 2eme Année.
Au lycée pendant l'année scolaire, et en stage pendant les vacances scolaire.

2 réponses

cs_megamario Messages postés 145 Date d'inscription lundi 15 juin 2009 Statut Membre Dernière intervention 14 février 2013
17 janv. 2010 à 19:21
Revoici mon code XML j'avais pas vu qu'il y avait la fonction:


<?xml version= "1.0" encoding="utf-8"?>
<config>
   <type version= "truc1">
      <mesures>
         
            <Nom>Mesure1</Nom>
            <Obj>Bidule</Obj>
             6 
            <Format>100</Format>
             V 
         
         
            <Nom>mesure2</Nom>
            <Obj>machin</Obj>
            7
            <Format>100</Format>
            A
         
      </mesures>
   </type>
   <type version  ="truc2">
etc... 



Technicien en électricité Industriel (39 ans), en cours de reconversion BTS IRIS 2eme Année.
Au lycée pendant l'année scolaire, et en stage pendant les vacances scolaire.
0
cs_megamario Messages postés 145 Date d'inscription lundi 15 juin 2009 Statut Membre Dernière intervention 14 février 2013
17 janv. 2010 à 19:32
Bon j'ai réussi mais j'aurais besoin d'une explication s'il vous plais

        private void button4_Click(object sender, EventArgs e)
        {
            ArrayList values = new ArrayList();
            string[] Liste = new string[80];
            XPathDocument DocXML;
            XPathNavigator Navig;
            XPathNodeIterator MaNavi;
            int Nb = 0;
            int i = 0;
            DocXML = new XPathDocument("params.xml");
            Navig = DocXML.CreateNavigator();
            MaNavi = Navig.Select(Navig.Compile ("config/type"));
            Nb = MaNavi.Count;
            if (MaNavi.Count != 0)
            {
                MaNavi.MoveNext();
                for (i = 0; i <= Nb - 1; i++)
                {
                    Liste[i] = MaNavi.Current.GetAttribute("version", "");
                    MaNavi.MoveNext();//.Current.MoveToNext();
                    values.Add(Liste[i]);
                }
                listBox1.DataSource = values;//Pour visualisé mon aquisition
            }
        }


Donc j'ai changé le deplacement de noeud en noeud par "MaNavi.MoveNext()"
et je suis obliger de mettre un 1er "MaNavi.MoveNext()" si non j'ai un vide.

Si on pouvais m'expliquer pourquoi faut que je deplace un 1er fois, merci. Et si on peut mettre 2 paramètres.




Technicien en électricité Industriel (39 ans), en cours de reconversion BTS IRIS 2eme Année.
Au lycée pendant l'année scolaire, et en stage pendant les vacances scolaire.
0
Rejoignez-nous