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 :

C# & xml : Recherche dans 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
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burundi

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 23
    Par défaut C# & xml : Recherche dans un fichier xml
    Bonjour tout le monde.
    J'ai un projet de l'école que je suis entrain de réaliseravec c# mais j'ai un problème sur la recherche dans le fichier xml.
    mon code c# est le suivant:

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    static public ArrayList LoadComp(string path)
            {
                compte c = new compte();    
               ArrayList comp = new ArrayList();
                XmlDocument doc = new XmlDocument();
                doc.Load(@"C:\Users\Administrateur\Desktop\Projet Banque\GestionComptes\Fihierxml\Comptes.xml");
                XmlNode xcomp = doc.FirstChild.SelectSingleNode("compte[@numcompte=" + (c.numcompte) + "]");
                //parcours des noeuds
                foreach (XmlNode com in xcomp)
                {
     
                    xcomp.Attributes["numcompte"].Value=Convert.ToString(c.Numcompte);
                    xcomp.Attributes["typecompte"].Value = c.Typecompte;
                    xcomp.Attributes["datecreation"].Value = c.datecreation.ToString();
                    xcomp.Attributes["solde"].Value = c.Solde.ToString();//récupère l'attribut Solde
                    if (c.GetType() == typeof(CompteCourant))
                    {
                        CompteCourant cc = (CompteCourant)c;
                    }
                    if (c.GetType() == typeof(CompteBloque))
                    {
                        CompteBloque cb = (CompteBloque)c;
                        xcomp.Attributes["frequence"].Value = cb.Frequence;
                        xcomp.Attributes["duree"].Value = cb.Duree;
                    }
                    if (c.GetType() == typeof(CompteEpargne))
                    {
                        CompteEpargne ce = (CompteEpargne)c;
                        xcomp.Attributes["frequence"].Value = ce.Frequence;
                    }
                    if (c.GetType() == typeof(CompteDecouvert))
                    {
                        CompteDecouvert cd = (CompteDecouvert)c;
                        xcomp.Attributes["decouvert"].Value = cd.Decouvert.ToString();
                    }
     
                    comp.Add(xcomp);//ajout dans la liste
     
                }
                return comp;
     
            }
    et celui qui est derrière le bouton rechercher d'un formulaire c# qui doit intéragir avec le fichier xml est le suivant:
    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
    30
    31
    32
    33
    private void BtnRechercher_Click(object sender, EventArgs e)
            {
                xmlFileUtil p = new xmlFileUtil();
                if (CmbRecherche.Text == ("Numéro de compte"))
                {
                    compte c = new compte();
                    xmlFileUtil.LoadComp(TxtRecherche.Text);
     
                   // p.ModifierCompte(TxtRecherche.Text);
     
                    //if (client.pasSucces == false)
                    //{
                        TxtNumCompte.Text = Convert.ToString(c.Numcompte);
                        CmbTypeCompte.Text = c.typecompte;
                       DtpDateCreation.Text = Convert.ToString(c.Datecreation.ToLongDateString());
                        TxtSolde.Text = Convert.ToString(c.Solde);
                        if(c.GetType()==typeof(CompteEpargne))
                        {
                            CompteEpargne ce=(CompteEpargne)c;
                            CmbFrequence.Text=ce.Frequence;
                        }
                        if(c.GetType()==typeof(CompteBloque))
                            {
                             CompteBloque cb=(CompteBloque)c;
     
                             CmbFrequence.Text=cb.Frequence;
                            CmbDuree.Text=cb.Duree;
                            }
                        if(c.GetType()==typeof(CompteDecouvert))
                        {
                            CompteDecouvert cd=(CompteDecouvert)c;
                            CmbDuree.Text=Convert.ToString(cd.Decouvert);
                        }
    Si quelqu'un peu me donner un coût de main, ça serait gentil.
    Merci d'avance.

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burundi

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 23
    Par défaut
    J'ai oublié de mettre le code que j'ai utilisé pour créer le fichier xml. Je le met ici en bas pour que celui qui veux bien m'aide comprenne bien. C'est projet de gestion bancaire au fait .
    Merci:

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Collections;
    using System.Xml;
    using System.IO;
    using Model;
     
     
    namespace Model
    {
       public class xmlCompte
        {
     
            #region"fichier xml pur l'Entreprise"
            public void AddCompte(CompteCourant c)
            {
                XmlDocument doc = new XmlDocument();//Création d'un objet document xml qui permet de représenter un fichier xml
                if (!File.Exists(@"C:\Users\Administrateur\Desktop\Projet Banque\GestionComptes\Fihierxml\Comptes.xml"))
                {
                    //création d'un noeud xml
                    XmlElement root = doc.CreateElement("Comptes");//<Comptes></Comptes>
                    doc.AppendChild(root);
                }
                else
                {
                    doc.Load(@"C:\Users\Administrateur\Desktop\Projet Banque\GestionComptes\Fihierxml\Comptes.xml");//changement du flux xml
                }
                //création du noeud compte
                XmlElement comp = doc.CreateElement("Compte");
                XmlAttribute numcompte = doc.CreateAttribute("numcompte");
                numcompte.Value = c.Numcompte.ToString();
                comp.Attributes.Append(numcompte);
                //comp.InnerText = c.Numcompte.ToString();
                //création de l'attribut ninea
                XmlAttribute typecompte = doc.CreateAttribute("typecompte");
                typecompte.Value = c.Typecompte;
                //ajout de l'attribut ninea dans le noeud compte
                comp.Attributes.Append(typecompte);
                //création de l'attribut ninea
                XmlAttribute datecreation = doc.CreateAttribute("datecreation");
                datecreation.Value = c.Datecreation.ToLongDateString() + " " + DateTime.Now.TimeOfDay;
                //ajout de l'attribut ninea dans le noeud compte
                comp.Attributes.Append(datecreation);
                //création de l'attribut solde
                XmlAttribute solde = doc.CreateAttribute("solde");
                solde.Value = c.Solde.ToString();
                //ajout de l'attribut solde dans le noeud compte
                comp.Attributes.Append(solde);
                if(c.GetType()==typeof(CompteEpargne))
                {
                    CompteEpargne ce=(CompteEpargne)c;
                    XmlAttribute frequence=doc.CreateAttribute("frequence");
                    frequence.Value=ce.Frequence.ToString();
                    comp.Attributes.Append(frequence);
                }
                else
                if(c.GetType()==typeof(CompteBloque))
                {
                CompteBloque cb=(CompteBloque)c;
                    CompteEpargne ce=(CompteEpargne)c;
                    XmlAttribute frequence=doc.CreateAttribute("frequence");
                    frequence.Value=ce.Frequence.ToString();
                    comp.Attributes.Append(frequence); 
                    XmlAttribute duree=doc.CreateAttribute("duree");
                    duree.Value=cb.Duree;
                    comp.Attributes.Append(duree);
                }
                else
                    if(c.GetType()==typeof(CompteDecouvert))
                    {
                        CompteDecouvert cd=(CompteDecouvert)c;
                        XmlAttribute decouvert=doc.CreateAttribute("decouvert");
                    decouvert.Value=cd.Decouvert.ToString();
                    comp.Attributes.Append(decouvert);
                    }
                     doc.FirstChild.AppendChild(comp);//ajout de noeud compte
                     doc.Save(@"C:\Users\Administrateur\Desktop\Projet Banque\GestionComptes\Fihierxml\Comptes.xml");//Enregistrement du flux dans un fichier xml
     
            }
     
            #endregion
        }
    }

  3. #3
    Membre très actif
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 250
    Par défaut
    Citation Envoyé par manidis Voir le message
    ... j'ai un problème sur la recherche dans le fichier xml...
    Dis nous en plus sur ton problème si tu veux qu'on t'aide ^

    PS : Mets des balises CODE et pas QUOTE sur ton code stp

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burundi

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 23
    Par défaut
    Bonjour au fait mon code pour la création du fichier xml est celui-ci:

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Collections;
    using System.Xml;
    using System.IO;
    using Model;
     
     
    namespace Model
    {
       public class xmlCompte
        {
     
            #region"fichier xml pur l'Entreprise"
            public void AddCompte(CompteCourant c)
            {
                XmlDocument doc = new XmlDocument();//Création d'un objet document xml qui permet de représenter un fichier xml
                if (!File.Exists(@"C:\Users\Administrateur\Desktop\Projet Banque\GestionComptes\Fihierxml\Comptes.xml"))
                {
                    //création d'un noeud xml
                    XmlElement root = doc.CreateElement("Comptes");//<Comptes></Comptes>
                    doc.AppendChild(root);
                }
                else
                {
                    doc.Load(@"C:\Users\Administrateur\Desktop\Projet Banque\GestionComptes\Fihierxml\Comptes.xml");//changement du flux xml
                }
                //création du noeud compte
                XmlElement comp = doc.CreateElement("Compte");
                XmlAttribute numcompte = doc.CreateAttribute("numcompte");
                numcompte.Value = c.Numcompte.ToString();
                comp.Attributes.Append(numcompte);
                //comp.InnerText = c.Numcompte.ToString();
                //création de l'attribut ninea
                XmlAttribute typecompte = doc.CreateAttribute("typecompte");
                typecompte.Value = c.Typecompte;
                //ajout de l'attribut ninea dans le noeud compte
                comp.Attributes.Append(typecompte);
                //création de l'attribut ninea
                XmlAttribute datecreation = doc.CreateAttribute("datecreation");
                datecreation.Value = c.Datecreation.ToLongDateString() + " " + DateTime.Now.TimeOfDay;
                //ajout de l'attribut ninea dans le noeud compte
                comp.Attributes.Append(datecreation);
                //création de l'attribut solde
                XmlAttribute solde = doc.CreateAttribute("solde");
                solde.Value = c.Solde.ToString();
                //ajout de l'attribut solde dans le noeud compte
                comp.Attributes.Append(solde);
                if(c.GetType()==typeof(CompteEpargne))
                {
                    CompteEpargne ce=(CompteEpargne)c;
                    XmlAttribute frequence=doc.CreateAttribute("frequence");
                    frequence.Value=ce.Frequence.ToString();
                    comp.Attributes.Append(frequence);
                }
                else
                if(c.GetType()==typeof(CompteBloque))
                {
                CompteBloque cb=(CompteBloque)c;
                    CompteEpargne ce=(CompteEpargne)c;
                    XmlAttribute frequence=doc.CreateAttribute("frequence");
                    frequence.Value=ce.Frequence.ToString();
                    comp.Attributes.Append(frequence); 
                    XmlAttribute duree=doc.CreateAttribute("duree");
                    duree.Value=cb.Duree;
                    comp.Attributes.Append(duree);
                }
                else
                    if(c.GetType()==typeof(CompteDecouvert))
                    {
                        CompteDecouvert cd=(CompteDecouvert)c;
                        XmlAttribute decouvert=doc.CreateAttribute("decouvert");
                    decouvert.Value=cd.Decouvert.ToString();
                    comp.Attributes.Append(decouvert);
                    }
                     doc.FirstChild.AppendChild(comp);//ajout de noeud compte
                     doc.Save(@"C:\Users\Administrateur\Desktop\Projet Banque\GestionComptes\Fihierxml\Comptes.xml");//Enregistrement du flux dans un fichier xml
     
            }
     
            #endregion
        }
    }
    Les code que j'ai écrit pour faire la recherche dans le fichier xml est celui-ci mais elle ne marche pas:
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    static public ArrayList LoadComp(string path)
            {
                compte c = new compte();    
               ArrayList comp = new ArrayList();
                XmlDocument doc = new XmlDocument();
                doc.Load(@"C:\Users\Administrateur\Desktop\Projet Banque\GestionComptes\Fihierxml\Comptes.xml");
                XmlNode xcomp = doc.FirstChild.SelectSingleNode("compte[@numcompte=" + (c.numcompte) + "]");
                //parcours des noeuds
                foreach (XmlNode com in xcomp)
                {
     
                    xcomp.Attributes["numcompte"].Value=Convert.ToString(c.Numcompte);
                    xcomp.Attributes["typecompte"].Value = c.Typecompte;
                    xcomp.Attributes["datecreation"].Value = c.datecreation.ToString();
                    xcomp.Attributes["solde"].Value = c.Solde.ToString();//récupère l'attribut Solde
                    if (c.GetType() == typeof(CompteCourant))
                    {
                        CompteCourant cc = (CompteCourant)c;
                    }
                    if (c.GetType() == typeof(CompteBloque))
                    {
                        CompteBloque cb = (CompteBloque)c;
                        xcomp.Attributes["frequence"].Value = cb.Frequence;
                        xcomp.Attributes["duree"].Value = cb.Duree;
                    }
                    if (c.GetType() == typeof(CompteEpargne))
                    {
                        CompteEpargne ce = (CompteEpargne)c;
                        xcomp.Attributes["frequence"].Value = ce.Frequence;
                    }
                    if (c.GetType() == typeof(CompteDecouvert))
                    {
                        CompteDecouvert cd = (CompteDecouvert)c;
                        xcomp.Attributes["decouvert"].Value = cd.Decouvert.ToString();
                    }
     
                    comp.Add(xcomp);//ajout dans la liste
     
                }
                return comp;
     
            }
    Le code # qui doit afficher les données trouvées dans le fichier xml(qui interagisse avec le code xml pour la recherche) derrière le bouton rechercher est celui-ci:

    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
    30
    31
    32
    33
    private void BtnRechercher_Click(object sender, EventArgs e)
            {
                xmlFileUtil p = new xmlFileUtil();
                if (CmbRecherche.Text == ("Numéro de compte"))
                {
                    compte c = new compte();
                    xmlFileUtil.LoadComp(TxtRecherche.Text);
     
                   // p.ModifierCompte(TxtRecherche.Text);
     
                    //if (client.pasSucces == false)
                    //{
                        TxtNumCompte.Text = Convert.ToString(c.Numcompte);
                        CmbTypeCompte.Text = c.typecompte;
                       DtpDateCreation.Text = Convert.ToString(c.Datecreation.ToLongDateString());
                        TxtSolde.Text = Convert.ToString(c.Solde);
                        if(c.GetType()==typeof(CompteEpargne))
                        {
                            CompteEpargne ce=(CompteEpargne)c;
                            CmbFrequence.Text=ce.Frequence;
                        }
                        if(c.GetType()==typeof(CompteBloque))
                            {
                             CompteBloque cb=(CompteBloque)c;
     
                             CmbFrequence.Text=cb.Frequence;
                            CmbDuree.Text=cb.Duree;
                            }
                        if(c.GetType()==typeof(CompteDecouvert))
                        {
                            CompteDecouvert cd=(CompteDecouvert)c;
                            CmbDuree.Text=Convert.ToString(cd.Decouvert);
                        }
    Le problème que j'ai est que le code xml qui effectue la recherche ne marche pas. Je voudrais que vous m'aidiez à le corriger pour qu'il intéragisse avec le code xml qui est ci-haut car c'est ce dernier qui crée le fichier xml. Merci de m'aider a corriger les deux dernières parties de code.
    Merci d'avance.

  5. #5
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut
    Déjà, quelques points d'ordre général :
    - Utiliser un switch...case serait peut-être mieux pour effectuer les tâches selon le type de compte.
    - plutôt que d'utiliser une ArrayList pour les retours d'XmlNodes, retourne une List<XmlNode>...

    Qu'est-ce qui ne marche pas ? pas d'appel ? une exception ? tu aurais un message d'erreur à nous donner ? La ligne qui te pose problème ?
    En débug, qu'est-ce que tu obtiens avec un pas à pas détaillé ?

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burundi

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 23
    Par défaut
    je reçoit ce message au niveau de l'exécution:

    Object reference not set to an instance of an object.
    et le curseur pointe au niveau du foreach sur l'objet xcomp

  7. #7
    Membre très actif
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 250
    Par défaut
    Je pense que ta ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XmlNode xcomp = doc.FirstChild.SelectSingleNode("compte[@numcompte=" + (c.numcompte) + "]");
    Est fausse. Met un point d'arrêt et vérifie que l'objet est rempli.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Javascript et Recherche dans un fichier XML
    Par Invité dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 05/02/2007, 08h27
  2. [XSLT] Comment rechercher dans un fichier xml
    Par abdoulax dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 22/10/2006, 19h28
  3. Probleme dans mon code recherche dans un fichier Xml
    Par dederfred dans le forum Delphi
    Réponses: 11
    Dernier message: 21/10/2006, 16h51
  4. Faire une recherche dans un fichier XML
    Par Devilish_Seraph dans le forum XML/XSL et SOAP
    Réponses: 7
    Dernier message: 21/01/2006, 13h41
  5. recherche dans un fichier xml (castor)
    Par pingoui dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 06/09/2004, 14h28

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