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

Signaler
Messages postés
146
Date d'inscription
lundi 15 juin 2009
Statut
Membre
Dernière intervention
14 février 2013
-
Messages postés
146
Date d'inscription
lundi 15 juin 2009
Statut
Membre
Dernière intervention
14 février 2013
-
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

Messages postés
146
Date d'inscription
lundi 15 juin 2009
Statut
Membre
Dernière intervention
14 février 2013

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.
Messages postés
146
Date d'inscription
lundi 15 juin 2009
Statut
Membre
Dernière intervention
14 février 2013

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.