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 :

Simple lecture d'un fichier XML


Sujet :

C#

  1. #1
    Invité
    Invité(e)
    Par défaut Simple lecture d'un fichier XML
    Salut comment le dit le titre j'ai besoin d'une simple lecture de fichiers XML
    mais mon code ne marche pas il me génère une exception.


    voici mon code :
    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
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Xml;
     
    namespace XML2
    {
        class Program
        {
            static void Main(string[] args)
            {
                string filename = "C:\\xmlprojet\\bank.xml";
     
                XmlDocument doc = new XmlDocument() ;
                doc.LoadXml(filename); // c'est ici qu'apparait l'exception
     
                XmlElement root = doc.DocumentElement;
                    XmlElement cpt = doc.CreateElement("compte");
                        XmlElement num = doc.CreateElement("num");
                        num.Value = "89";
                        XmlElement nom = doc.CreateElement("nom");
                        nom.Value = "AZERTY";
                        XmlElement solde = doc.CreateElement("solde");
                        solde.Value = "20000";
                        XmlElement decouvert = doc.CreateElement("decouvert");
                        decouvert.Value = "0";
     
                    cpt.AppendChild(num);
                    cpt.AppendChild(nom);
                    cpt.AppendChild(solde);
                    cpt.AppendChild(decouvert);
                root.AppendChild(cpt);
     
                doc.Save(filename);
     
     
            }
        }
    }


    J'ai beau cherché sur :
    -google
    -FAQ de C#
    -sur ce forum

    mais j'ai pas été satisfait.

    Donc toute aide est la bienvenue.

    Merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Voici ce que me dit l'exception:

    Données non valides au niveau racine. Ligne 1, position 1.

    et voilà à quoi ressemble mon fichier bank.xml:

    <? xml version="1.0" encoding="UTF-8" ?>
    <repertoire>
    <compte>
    <num>47</num>
    <nom>BEAN</nom>
    <solde>15000</solde>
    <decouvert>0</decouvert>
    </compte>
    <compte>
    <num>94</num>
    <nom>QWERTY</nom>
    <solde>20000</solde>
    <decouvert>0</decouvert>
    </compte>
    <compte>
    <num>77</num>
    <nom>DUPONT</nom>
    <solde>25000</solde>
    <decouvert>0</decouvert>
    </compte>
    </repertoire>

    Où est le problème ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2007
    Messages : 180
    Points : 198
    Points
    198
    Par défaut
    Salut,

    je viens de vérifier sur mes fichiers XML, en première ligne, j'ai ça:
    <?xml version="1.0" encoding="utf-8"?>

    Par contre, j'utilise Load() au lieu de LoadXml(). A première vue sur le site MSDN, le loadXml est plutôt utilisé pour un string que pour un flux de fichier.
    Une légende amérindienne raconte qu'il y eut un immense incendie de forêt. Tous les animaux terrifiés et atterrés observaient, impuissants, le désastre. Seul, un colibri s'activait et allait chercher quelques gouttes d'eau dans son bec pour éteindre le feu.
    Au bout d'un moment, le tatou, agacé par ses agissements dérisoires, lui dit :
    'Colibri ! N'es-tu pas fou ? Tu crois que c'est avec ces gouttes d'eau que tu vas éteindre le feu ?
    'Je le sais, répond le colibri, mais je fais ma part...

  4. #4
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 30
    Points : 24
    Points
    24
    Par défaut
    Bonjour, j'ai regardé un peu ton fichier xml. Déjà comme te l'a dit jamaliss, il faut que tu enlèves les espaces dans l'entête de ton fichier xml.
    Sinon j'ai modifié un peu ton code et ça marche pas trop mal:

    string filename = @"C:\Documents and Settings\mlacoste\Bureau\bank.config";

    XmlDocument doc = new XmlDocument();
    doc.Load(filename); // c'est ici qu'apparait l'exception

    XmlElement root = doc.DocumentElement;
    XmlNode cpt = doc.CreateNode(XmlNodeType.Element, "compte", null);
    XmlNode num = doc.CreateNode(XmlNodeType.Element,"num" , null);
    num.InnerText = "89";
    XmlNode nom = doc.CreateNode(XmlNodeType.Element, "nom", null);
    nom.InnerText = "AZERTY";
    XmlNode solde = doc.CreateNode(XmlNodeType.Element,"solde",null);
    solde.InnerText = "20000";
    XmlNode decouvert = doc.CreateNode(XmlNodeType.Element,"decouvert",null);
    decouvert.InnerText = "0";

    cpt.AppendChild(num);
    cpt.AppendChild(nom);
    cpt.AppendChild(solde);
    cpt.AppendChild(decouvert);
    root.AppendChild(cpt);

    doc.Save(filename);

    Voilà. Bonne continuation

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    Je confirme. Le problème vient bien de l'espace entre le ? et xml dans la déclaration initiale. En effet le parser considère que le nom commence par cet espace. Il faut également charger le fichier par Load et non LoadXml. En revanche je ne saisis pas l'intérêt du code précédent qui créé des noeuds au lieu d'éléments.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Merci les progs !

    Voici le code complet pour une ecriture:
    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
     
                string filename = "C:\\xmlprojet\\bank.xml";
     
                XmlDocument doc = new XmlDocument() ;
                doc.Load(filename);//Load() et non LoadXML()
                //il faut aussi retirer l'espace entre le '<?' et 'xml' dans le fichier 
     
                XmlElement root = doc.DocumentElement;
                    XmlElement cpt = doc.CreateElement("compte");
                        XmlElement num = doc.CreateElement("num");
                        num.InnerText = "89"; //num.InnerText et non num.Value
                        XmlElement nom = doc.CreateElement("nom");
                        nom.InnerText = "AZERTY";
                        XmlElement solde = doc.CreateElement("solde");
                        solde.InnerText = "20000";
                        XmlElement decouvert = doc.CreateElement("decouvert");
                        decouvert.InnerText = "0";
     
                    cpt.AppendChild(num);
                    cpt.AppendChild(nom);
                    cpt.AppendChild(solde);
                    cpt.AppendChild(decouvert);
                root.AppendChild(cpt);
     
                doc.Save(filename);
    et voici la lecture:

    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
     
                XmlNodeList listeCompte = doc.SelectNodes("/repertoire/compte");                       
                                      //ou doc.GetElementsByTagName("compte");
     
                for (int i = 0; i < listeCompte.Count ; i++)
                {
                    XmlNode compte = listeCompte[i];
     
                    XmlNode num = compte.FirstChild;
                    XmlNode nom = num.NextSibling;
                    XmlNode solde = nom.NextSibling;
                    XmlNode decouvert = solde.NextSibling;
     
                    Console.WriteLine(num.InnerText);
                    Console.WriteLine(nom.InnerText);
                    Console.WriteLine(solde.InnerText);
                    Console.WriteLine(decouvert.InnerText);
                    Console.WriteLine("\n\n");
                }
    Voilà c'est fini et merci à LoDev, mikawell3000 et sharpdev !

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

Discussions similaires

  1. Problème de lecture d'un fichier XML d'InfoPath
    Par snadus dans le forum InfoPath
    Réponses: 7
    Dernier message: 06/06/2006, 14h45
  2. Lecture d'un fichier XML de config avec Java
    Par cofy dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 31/01/2006, 15h54
  3. Problème de lecture dans un fichier xml
    Par Pyra dans le forum Langage
    Réponses: 2
    Dernier message: 18/12/2005, 00h13
  4. Probleme de lecture d'un fichier XML
    Par chleuh dans le forum Langage
    Réponses: 8
    Dernier message: 30/08/2005, 12h04
  5. [C#] [XML] Lecture d'un fichier XML => Combobox
    Par Chad`Chiwa dans le forum Windows Forms
    Réponses: 8
    Dernier message: 09/03/2005, 08h57

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