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#, Stocker itération XML dans Array ou list [Débutant]


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 Web
    Inscrit en
    Juin 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2013
    Messages : 46
    Par défaut C#, Stocker itération XML dans Array ou list
    Bonjour,

    j'essaye désespérément de décomposer mon fichier XML et de stocker les infos de PeakMessage dans quatre variables (pour chaque infos) de type list ou tableau.

    J'utilise déjà la deserialisation pour stocker les infos des elements de Gateway_Info dans des variables, mais ca ne fonctionne pas pour PeakMessage.
    Pouvez vous me dire comment m'y prendre pour PeakMessage?

    mon fichier xml ressemble a ca:

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?xml version="1.0" encoding="utf-8"?>
    <LifeTouchPeakDataPayload xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Gateway_Info>
        <LocalID>15</LocalID>
        <SoftwareVersion>458</SoftwareVersion>
        <TimeStamp>08/11/2013 12:11:56</TimeStamp>
        <SessionID>3</SessionID>
      </Gateway_Info>
      <Device_Info>
        <Type>LifeTouch</Type>
        <ID>226</ID>
        <FirmwareVersion>288</FirmwareVersion>
      </Device_Info>
      <LifeTouchPeakData_Output>
        <PeakMessages>
          <PeakMessage>
            <Header>1</Header>
            <Tag>122</Tag>
            <Amplitude>234</Amplitude>
            <Timestamp>143594</Timestamp>
          </PeakMessage>
          <PeakMessage>
            <Header>1</Header>
            <Tag>123</Tag>
            <Amplitude>141</Amplitude>
            <Timestamp>143847</Timestamp>
          </PeakMessage>
        <SequenceID>1</SequenceID>
      </LifeTouchPeakData_Output>
      <Patient_Info>
        <ID>ben</ID>
        <RegistrationDateTime>2013-11-08T12:05:57.4528556+00:00</RegistrationDateTime>
      </Patient_Info>
      <Messages />
    </LifeTouchPeakDataPayload>
    j'ai mis le xml en pj,
    Merci par avance,

    Benmaster
    Fichiers attachés Fichiers attachés

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Par défaut
    Salut,
    tu peux faire ça :
    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
    using (DataSet ds = new DataSet())
                {
                    ds.ReadXml("LifeTouch_226_PeakData.xml");
                    if (!ds.Tables.Contains("PeakMessage"))
                    {
                        throw new ArgumentException("Le fichier est corrompu il ne contient pas les données PeakMessage");
                    }
                    using (DataTable t_PeakMessages = ds.Tables["PeakMessage"])
                    {
                        for (int index = 0; index < t_PeakMessages.Rows.Count; index++)
                        {
                            Console.WriteLine(t_PeakMessages.Rows[index]["Header"]);
                            Console.WriteLine(t_PeakMessages.Rows[index]["Tag"]);
                            Console.WriteLine(t_PeakMessages.Rows[index]["Amplitude"]);
                            Console.WriteLine(t_PeakMessages.Rows[index]["Timestamp"]);
                        }
                    }
                }
                Console.ReadLine();
    A+

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2013
    Messages : 46
    Par défaut
    Merciiii, ca marche super bien, tu m'as même mis une gestion d'erreur merci beaucoup!

    Juste une question, j'aurai pu faire ca avec les methodes de LINQ ou une deserialisation? Je cherche avec ca depuis un moment je n'ai rien trouver

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Par défaut
    Salut, de rien. Moi j'utilise la méthode que je t'ai donné.
    Donc pour la désérialisation j'ai trouvé ça :
    http://stackoverflow.com/questions/1...uble-with-list

    Adapté à ton fichier ça donne un truc comme ça qui marche bien aussi :
    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
     
    [Serializable()]
        [XmlRoot("LifeTouchPeakDataPayload")]
        public class Root
        {
            [XmlElement("LifeTouchPeakData_Output")]
            public LifeTouchPeakData_Output output { get; set; }
        }
     
        [Serializable()]
        [XmlRoot("LifeTouchPeakData_Output")]
        public class LifeTouchPeakData_Output
        {
            [XmlElement("PeakMessages")]
            public PeakMessages messages { get; set; }
        }
     
        [XmlRoot("PeakMessages")]
        public class PeakMessages
        {
            [XmlElement("PeakMessage")]
            public PeakMessage[] listeMessages { get; set; }
        }
     
        [Serializable()]
        public class PeakMessage
        {
            [XmlElement("Header")]
            public int m_Header {get; set;}
            [XmlElement("Tag")]
            public int m_Tag { get; set; }
            [XmlElement("Amplitude")]
            public int m_Amplitude { get; set; }
            [XmlElement("Timestamp")]
            public int m_Timestamp { get; set; }
        }
        class Program
        {
            static void Main(string[] args)
            {
                XmlReader xml = XmlReader.Create("LifeTouch_226_PeakData.xml");
                var serializer = new XmlSerializer(typeof(Root));
                var des = (Root)serializer.Deserialize(xml);
     
                Console.WriteLine(des);
                foreach (var message in des.output.messages.listeMessages)
                {
                    Console.WriteLine(message.m_Header);
                    Console.WriteLine(message.m_Tag);
                    Console.WriteLine(message.m_Amplitude);
                    Console.WriteLine(message.m_Timestamp);
                }
                Console.ReadLine();
            }
        }
    C'est vrai que c'est bien comme méthode.
    Moi je faisais mes object en passant chaque lignes dans un constructeur de classe mais à vrai dire ta méthode est mieux. Bon c'est un peu plus abstrait hmmm..

    Je regarde un peu pour LINQ. Jamais entendu parler mais appartement ça existe. Si je trouve rien bonne continuation

  5. #5
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Par défaut
    La même chose en LINQ. Enfin reste à créer l'objet PeekMessage avec les valeurs.

    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
     
    XElement xml = XElement.Load("LifeTouch_226_PeakData.xml");
                var messages = xml.Element("LifeTouchPeakData_Output").Element("PeakMessages").Elements("PeakMessage");
     
                foreach (var message in messages)
                {
                    var Header = message.Element("Header");
                    Console.WriteLine(Header.Value);
                    var Tag  = message.Element("Tag");
                    Console.WriteLine(Tag.Value);
                    var Amplitude = message.Element("Amplitude");
                    Console.WriteLine(Amplitude.Value);
                    var Timestamp = message.Element("Timestamp");
                    Console.WriteLine(Timestamp.Value);
                }
                Console.ReadLine();
    A+

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2013
    Messages : 46
    Par défaut
    Ah super je garder précieusement toutes ces infos, et du coup je vais utiliser la méthode LINQ que je comprend mieux, Merci beaucoup!!

    Je pense que cet article va en aider plus d'un!

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

Discussions similaires

  1. Stocker un XML dans un Stream
    Par Ya7yaKech dans le forum Windows Forms
    Réponses: 14
    Dernier message: 11/02/2009, 10h52
  2. Récupérer du XML dans Array
    Par Invité dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/03/2007, 00h55
  3. Réponses: 9
    Dernier message: 27/06/2006, 21h48
  4. [XML] mettre les valeurs XML dans un array
    Par yodark dans le forum Bibliothèques et frameworks
    Réponses: 11
    Dernier message: 05/01/2006, 17h35
  5. [XML] stocker des données dans un fichier XML
    Par R3iTt0R dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 27/05/2005, 16h51

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