IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Parser un fichier xml


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 44
    Par défaut Parser un fichier xml
    Bonjour,

    Je débute en C# et j'ai besoin de récupérer certaines informations contenues dans un fichier *.xml.

    Je compte récupérer le fichier à l'aide de la classe OpenDialog cependant sur plusieurs exemples que j'ai vu. Tous utilise la classe ParseFile.

    Voilà ma question est ce la bonne manière pour moi de récupérer certaines informations de mon fichier ?

    Merci

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par didio Voir le message
    Tous utilise la classe ParseFile.
    Ah, je ne connais pas cette classe

    Pour lire un fichier XML, c'est tout simple. Quand tu appelles la fonction OpenFile() sur ton objet OpenFileDialog, elle te retourne un Stream. Il te suffit de lire ce Stream :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    var xDoc = XDocument.Load(tonStream);
    Ci-dessus on utilise Linq to XML, qui n'est disponible qu'a partir de la version 3.5 du framework .NET.

    Si tu utilises un framework <= 3.0, tu dois faire comme ceci :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var xmlDoc = new XmlDocument();
    xmlDoc.Load(tonStream);

    Ensuite il te reste a lire ton fichier pour faire ce que tu souhaites.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 966
    Par défaut
    Ou sinon, tu créé une ossature en objet correspondant à ton schéma XML et tu déserialise.

    Par exemple pour le XML suivant :
    Code XML : 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
    <?xml version="1.0" encoding="UTF-8"?>
    <Annuaire departement="69" annee="2018">
    	<Villes>
    		<Ville codepostal="69000" nom="Lyon">
    			<Personnes>
    				<personne nom="toto", prenom="popo">
    					<Rue1>12, avenue du développement Delphi</Rue1>
    					<Rue2 />
    					<Rue3 />
    					<Fixe>0426000000</Fixe>
    					<Fax>0426000000</Fax>
    					<Site>www.developpez.com</Site>
    				</personne>
    			</Personnes>
    		</Ville> 
    	</Villes>
    </Annuaire>

    On déclaré les classes suivantes :
    Code C# : 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
    public class Annuaire
    {
        [XmlAttribute("departement")]
        public String Departement { get; set; }
     
        [XmlAttribute("annee")]
        public UInt32 Annee { get; set; }
     
        [XmlArrayItem("Ville")]
        public List<Ville> Villes = new List<Ville>();
    }
     
    public class Ville
    {
        [XmlAttribute("codepostal")]
        public String CodePostal { get; set; }
     
        [XmlAttribute("nom")]
        public String Nom { get; set; }
     
        [XmlArrayItem("Personne")]
        public List<Personne> Personnes = new List<Personne>();
    }
     
    public class Personne
    {
        public String Rue1 { get; set; }
     
        public String Rue2 { get; set; }
     
        public String Rue3 { get; set; }
     
        public String Fixe { get; set; }
     
        public String Fax { get; set; }
     
        public String Site { get; set; }
    }

    Et on déserialise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Annuaire annuaire = null;
    using (var stream = new StreamReader("Annuaire.xml"))
    {
        var serialiser = new XmlSerializer(typeof(Annuaire));
        annuaire = (Annuaire)serialiser.Deserialize(stream);
    }

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 44
    Par défaut
    Nickel.

    Merci beaucoup je vais partir là dessus.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 44
    Par défaut
    Bonjour,

    Je reviens la dessus, il se trouve que mon xml à la forme suivante :

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <Annuaire departement="69" annee="2018">
    	<Villes>
    		<Ville codepostal="69000" nom="Lyon">
    			<Personnes>
                             <Ville>
    				<personne nom="toto", prenom="popo">
    					<Rue1>12, avenue du développement Delphi</Rue1>
    					<Rue2 />
    					<Rue3 />
    					<Fixe>0426000000</Fixe>
    					<Fax>0426000000</Fax>
    					<Site>www.developpez.com</Site>
    				</personne>
                             </Ville>
                              <Ville>
    				<personne nom="tata", prenom="papa">
    					<Rue1>12, avenue du développement Delphi</Rue1>
    					<Rue2 />
    					<Rue3 />
    					<Fixe>0426000000</Fixe>
    					<Fax>0426000000</Fax>
    					<Site>www.developpez.com</Site>
    				</personne>
                             </Ville>
    			</Personnes>
    		</Ville> 
    	</Villes>
    </Annuaire>
    Il y a donc des balises fils portant le même nom que les pères. J'ai donc un soucis avec ça.

    Je suis donc parti là dessus :
    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
    StringBuilder output = new StringBuilder();
                    using (XmlReader reader = XmlReader.Create(new StringReader(fileContent)))
                    {
                        while (reader.ReadToFollowing("Ville"))
                        {
                            if ((reader.GetAttribute("codepostal") == "69000"))
                            {
                                do {
                                        Console.WriteLine(reader.GetAttribute("nom"));
                                    } while (reader.ReadToDescendant("personne"));
     
                            }
                            else {
                                //Console.WriteLine("not found");
                            } 
     
                        } Console.Read();
     
                    }
    Mais je n'arrive pas à récupérer les attributs des deux fils "personnes".
    Tout d'abord est ce que le reader lit les données jusqu'à la bonne balise ( ne s’arrête pas sur la balise fils portant le même nom) ?
    Et comment récupérer les noms des balises personne jusqu’à la fin de la balise parent "Ville". Car dans mon cas seul le premier enfant est récupéré.

    Merci

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Par défaut
    La dé-sérialisation a pour but de convertir ton fichier XML en objets. Tu ne devrais donc pas avoir à lire ton fichier XML comme ça. Cf l'exemple fournit par @popo..

Discussions similaires

  1. problème pour parser un fichier xml avec XML::Simple
    Par black_code dans le forum Modules
    Réponses: 3
    Dernier message: 30/01/2006, 19h32
  2. [xslt] Parser 2 fichiers XML
    Par malekms dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 30/12/2005, 12h22
  3. Parser un fichier XML
    Par Charlinecha dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 11/07/2005, 17h18
  4. [SAX] parser un fichier xml en Java
    Par royou dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 10/02/2005, 17h12
  5. parser des fichier .xml en perl
    Par djibril dans le forum Modules
    Réponses: 13
    Dernier message: 18/05/2004, 17h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo