Désérialisation XML dans un DataSet [Résolu]

ChrisBzh56
Messages postés
13
Date d'inscription
lundi 3 décembre 2007
Dernière intervention
25 septembre 2008
- 25 août 2008 à 15:18 - Dernière réponse : cs_momo187
Messages postés
15
Date d'inscription
lundi 25 août 2008
Dernière intervention
17 novembre 2010
- 26 août 2008 à 10:10
Bonjour,

J'ai un souci dans mon projet, dans lequel, je construit un fichier XML, que je veux désérialisé et mettre dans un DataSet, mais cela ne marche pas et l'intitulé de mon erreur est "Il existe une erreur dans le document XML (1, 2)."

Voici le bout de code pour désérialisé mon fichier XML

            DataSet monDataset;
           
            XmlSerializer mySerializer = new XmlSerializer(typeof(DataSet));
          
            FileStream myFileStream = new FileStream("XMLFile1.xml", FileMode.Open);
           
            monDataset = (DataSet)mySerializer.Deserialize(myFileStream);

            GridView1.DataSource = monDataset;
            GridView1.DataBind();

Faut-il utiliset l'objet DataSet ou utilisé une classe ?!... Je suis perdue
Merci
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
cs_momo187
Messages postés
15
Date d'inscription
lundi 25 août 2008
Dernière intervention
17 novembre 2010
- 25 août 2008 à 16:07
3
Merci
Bonjour,

Ce que tu veux faire, c'est récupérer des données dans un XML c'est bien ca? je ne connais pas le terme "désérialisé". Desolé.

Je l'ai déjà fait et j'ai effectivement utilisé un DataSet tout comme toi. Je n'ai pas eu besoin de classe. Ton XML est composé de manière correcte? C'est à dire avec des "tables"?

Pour lire j'utilise monDataSet.ReadXML
Ensuite tu peux compter les éléments dans ton DataSet :
Ex : int eleves = monDataSet.Tables[1].Rows.Count; <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>1 étant le numéro de ma table, c'est pour cette raison que je te demande si ton XML est composé de manière correcte. Ensuite tu peut parcourir ton DataSet à l'aide d'une boucle "for" :
for (int j = 0; j < monDataSet.Tables[1].Rows.Count; j++)
Puis par exemple si je veux récupérer le numéro d'un élève (dans mon cas) :
monDataSet.Tables["ELEVE"].Rows[j]["NUMERO"].ToString()
Il faut définir la table et le champ que tu recherches dans ton fichier XML. Pui c'est à peu de chose prêt tout.
Voilà, je reste à dispo si tu as d'autres question, et désolé si ce n'était pas vraiment ta question mais c'est ce que j'ai compris.

Merci cs_momo187 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de cs_momo187
billou_13
Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
- 25 août 2008 à 16:59
0
Merci
Bonjour,

- Quel est le format de ton fichier XML ?

- Correspond-t-il au template XML de sérialisation d'un DataSet ?
Si non, je te conseille de récupère un exemple XML en sérialisant un objet DataSet pré-rempli. Ainsi, tu auras ton schéma XML qui fonctionne ^^

Bonne journée,

Billou_13
Commenter la réponse de billou_13
billou_13
Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
- 25 août 2008 à 17:04
0
Merci
Une autre solution serait de créer une classe sérializable.
Ainsi, tu pourrais charger/sauvegarder un fichier XML moins compliqué (car je suppose que la classe DataSet doit générer un XML assez verbeux ^^; j'ai pas essayer).
Une fois ton objet récupéré, tu pourras récupérer le DataSet associé via une méthode statique.

Tu peux jeter un coup d'oeil au tutorial suivant:
http://www.csharpfr.com/tutoriaux/DATA-TRANSFER-OBJECT-PATTERN-DATA-ACCESS-WEB-SERVICE_772.aspx
La partie 3.1 devrait t'intéresser:
- 3.2 Data Transfer Objects (DTO) correspond à ta classe sérializable
- 3.3 La classe Assembler permet de récuperer le DataSet associé à ton DTO

Voila, bon courage ^^


Billou_13
Commenter la réponse de billou_13
billou_13
Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
- 25 août 2008 à 17:06
0
Merci
Attention, je me suis trompé dans les numéro de partie:
3.2 -> 3.1.2
3.3 -> 3.1.3

Désolé,

Billou_13

PS: à quand l'édition de nos posts ? ^^
Commenter la réponse de billou_13
ChrisBzh56
Messages postés
13
Date d'inscription
lundi 3 décembre 2007
Dernière intervention
25 septembre 2008
- 26 août 2008 à 09:40
0
Merci
Mon fichier est un bien un fichier .xml

Voici un bout :

<listePersonnes>

  <personne>

    <nom>NOM1</nom>

    <prenom>Prenom1</prenom>

    <type>Admin</type>

    <couleur>red</couleur>
<listeDocuments>

            <document>

               <type>Attestation Sûreté</type>

               <couleur>#FFFFDC</couleur>

               <dateExpiration/>

               <dateAnticipation/>

               <dateControle/>

       </document>

           <document>

              <type>Autorisation provisoire de travail</type>

              <couleur>#FFFFDC</couleur>

              <dateExpiration/>

              <dateAnticipation/>

              <dateControle/>

       </document>
       ...
    </listeDocuments>

...

     <listePersonnes>

Je vais etudié la solution de billou_13 et son tuto ainsi que les éléments de réponse de Momo187 (mais à l'inverse de ta réponse je veux transformé mon XML en DataSet)

Merci a vous deux, je vous tiens au courant
Commenter la réponse de ChrisBzh56
ChrisBzh56
Messages postés
13
Date d'inscription
lundi 3 décembre 2007
Dernière intervention
25 septembre 2008
- 26 août 2008 à 10:06
0
Merci
Voila, j'ai réussit, enfait merci momo187, c'était sa !

Voila le code :

            DataSet monDataset= new DataSet();
            Stream readDs = new FileStream("Gestion/XMLFile1.xml", FileMode.Open);
            monDataset.ReadXml(readDs);
            readDs.Close();

            GridView1.DataSource = monDataset;
            GridView1.DataBind();

Avec ce bout de code je récupère uniquement la 1ère branche de mon arbre XML, mais après je fais une boucle sur mon dataset pour afficher la " <liste document> "

            for (int j = 0; j < monDataset.Tables[1].Rows.Count; j++)

            {

                DropDownList1.Items.Add(monDataset.Tables["document"].Rows[j]["couleur"].ToString());

            }

Merci encore

           
Commenter la réponse de ChrisBzh56
cs_momo187
Messages postés
15
Date d'inscription
lundi 25 août 2008
Dernière intervention
17 novembre 2010
- 26 août 2008 à 10:10
0
Merci
Il n'y a pas de quoi! Bonne journée et bonne prog
Commenter la réponse de cs_momo187

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.