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 :

Lecture de fichier ou flux XML


Sujet :

C#

  1. #1
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Lecture de fichier ou flux XML
    Bonjour

    Jusqu'a présent j'ai une solide pratique de lecture et parsage de fichier texte dont la structure est suposée connue

    Mais pour l'XML je suis encore tout bete

    J'essaye de comprendre les outils disponibles pour traiter soit un flux soit un fichier XML exemple ci apres

    Dans le cas simple "un fichier"
    Quel est le principe de base pour

    1- Lire le XML
    2- Connaitre le nombre d'élements distinct <trace> dans l'exemple
    3- Extraire les information d'un élement ?

    A suposer que le contenu ci-apres ne soit pas un fichier mais un flux continu via http qu'est ce qui peut changer dans le traitement ?


    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
    <?xml version="1.0" encoding="UTF-8"?>
    <traces>
      <trace>
        <type>0</type>
        <source>bewegingssensor</source>
        <time>2008-10-15T08:26:52.0</time>
        <coordinate>
          <latitude>50.47247</latitude>
          <longitude>4.49415</longitude>
        </coordinate>
        <mileage>136107871</mileage>
        <heading>55</heading>
        <speed>116</speed>
      </trace>
      <trace>
        <type>0</type>
        <source>bewegingssensor</source>
        <time>2008-10-15T08:28:52.0</time>
        <coordinate>
          <latitude>50.47193</latitude>
          <longitude>4.54842</longitude>
        </coordinate>
        <mileage>136111792</mileage>
        <heading>35</heading>
        <speed>116</speed>
      </trace>
      <trace>
        <type>0</type>
        <source>bewegingssensor</source>
        <time>2008-10-15T08:30:52.0</time>
        <coordinate>
          <latitude>50.48601</latitude>
          <longitude>4.59935</longitude>
        </coordinate>
        <mileage>136115707</mileage>
        <heading>32</heading>
        <speed>118</speed>
      </trace>
    </traces>
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  2. #2
    Rédacteur
    Avatar de Paul Musso
    Profil pro
    Inscrit en
    Août 2008
    Messages
    368
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 368
    Points : 443
    Points
    443
    Par défaut
    Bonjour,

    Voici un petit exemple de ce que tu demandes :

    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
    XDocument doc = XDocument.Load("fichier.xml");
     
    var requete = from node in doc.Descendants("trace")                          
                  select new{
                    Type = node.Element("type").Value,
                    Source = node.Element("source").Value,
                    MileAge = node.Element("mileage").Value,
                    Coordinate = new {
                        Latitude = node.Element("coordinate").Element("latitude").Value,
                        Longitude = node.Element("coordinate").Element("longitude").Value
                    }
                  };
     
    Console.WriteLine("Nombre de noeuds trace : {0}", requete.Count());
    foreach (var el in requete)
    {
     
        Console.WriteLine("{0} {1} {2} {3} {4}", el.Type, el.Source, el.MileAge, el.Coordinate.Latitude, el.Coordinate.Longitude);
    }
     
    Console.ReadKey();
    Dans le cas d'un flux, il suffit simplement de charger ce flux dans un objet de type XmlReader et de l'utiliser avec la méthode Load de la classe XElement, exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XElement element = XElement.Load(XmlReader.Create(variableXML));
    La documentation officielle de LinQ to XML devrait t'aider : http://msdn.microsoft.com/fr-fr/library/bb387098.aspx.

  3. #3
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci Paul

    J'entrevois la methode, mais ca signifie que je dois connaitre a priori le schema de ce que je recois ?

    Personnellement, je travaille avec le FW 3.5

    Mais le serveur sur lequel je dois faire des modif est en 2.0, donc je pense que je vais devoir un peu adapter cette syntaxe pour la causde ?
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  4. #4
    Rédacteur
    Avatar de Paul Musso
    Profil pro
    Inscrit en
    Août 2008
    Messages
    368
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 368
    Points : 443
    Points
    443
    Par défaut
    Arf,

    Effectivement, si tu dois utiliser le framework 2.0, il faut passer par les vieilles API XML (exemple : http://www.c-sharpcorner.com/UploadF...tMellli21.aspx).

    Concernant le schéma, tu n'es pas obligé de le connaître pour lire un fichier XML. Tout dépend de ce que tu veux faire avec ...

  5. #5
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut XML sans Linq
    Bonjour j'ai encore une question naive avec XML

    Admettons que je n'utilise pas linq

    J'ai vu plusieurs exemples de lecture XML mais je n'ai pas vraiment pu en deduire une methode pratique standard

    J'ai retenu un exemple

    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
          reader = new XmlTextReader(doc);
     
          // Read the File
          while (reader.Read())
          {
            XmlNodeType nodeType = reader.NodeType;
            switch (nodeType)
            {
              case XmlNodeType.Element:
                sw.WriteLine("Element name is {0}", reader.Name);
                if (reader.HasAttributes)
                {
                  for (int i = 0; i < reader.AttributeCount; i++)
                  {
                    reader.MoveToAttribute(i);
                    sw.WriteLine("Attribute is {0} with Value {1}: ", reader.Name, reader.Value);
                  }
                }
                break;
              case XmlNodeType.Text:
                sw.WriteLine("Value is: " + reader.Value);
                break;
            }
          }
    Mais si je comprends bien, je dois tester chaque nom d'élément et en fonction de ce nom attribuer les variables du programe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    String Nom,Prenom;
    int age;
     
    if (reader.Name.equals("Nom"))
    {
      Nom=reader.Value;   // c'est du pseudo code bien sur ! : je n'ai pas encore acces a value
    }
    Ca me semble un peu bricolo quand meme !!
    Je fais du parsage de fichier texte depuis des années, j'espere quand meme que les outils Xml permettent de faire des choses plus subtiles que l'exemple ci-dessus !
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

Discussions similaires

  1. Problème de lecture du fichier hibernate.cfg.xml
    Par fabiolerusse dans le forum Hibernate
    Réponses: 1
    Dernier message: 06/03/2008, 08h28
  2. [DOM4J] Problème de lecture de fichier xml avec dom4j
    Par santana2006 dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 05/04/2006, 16h52
  3. VA lors de lecture du fichier XML
    Par LN(a) dans le forum Langage
    Réponses: 6
    Dernier message: 14/09/2005, 23h43
  4. [vb.net][xml] probleme de lecture de fichier
    Par graphicsxp dans le forum Windows Forms
    Réponses: 4
    Dernier message: 27/07/2005, 11h51
  5. Lecture de fichier au format XML ??
    Par nico0007 dans le forum Langage
    Réponses: 1
    Dernier message: 07/07/2005, 15h40

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