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

VB.NET Discussion :

[VB.Net] Comment lire un fichier xml ?


Sujet :

VB.NET

  1. #1
    Candidat au Club
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [VB.Net] Comment lire un fichier xml ?
    Salut,

    Je voudrais lire un fichier xml en VB.net dont la structure est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <Recordbook>
      <Records>
        <Record>
          <FirstValue>10</FirstValue>
          <SecondValue>51</SecondValue>
        </Record>
        <Record>
          <FirstValue>25</FirstValue>
          <SecondValue>38</SecondValue>
        </Record>
      </Records>
    </Recordbook>
    qqn pourrait il me conseiller un algorithme de solution pour lire ce type de fichiers et en extraire les données essentielles, le problème étant que la liste de "record" est contenue dans "records" lui même contenu dans le "recordbook". J'ai posté le code en bas de pasge, si qqn pouvait y regarder, ce serait super cool. Je ne parviens vraiment pas à trouver!!!

    Merci davance

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    Salut,

    C'est classique en xml, tu peux utiliser un XmlDocument pour charger ton fichier, ensuite tu peux accéder à ses éléments fils, qui eux même ont des éléments fils etc... Pour accéder directement à certains éléments tu peux utiliser des requetes Xpath (par exemple pour demander directement tous les noeuds de type Record).

    Donc creuse du coté de la classe XmlDocument, et de la syntaxe du langage XPath (trés simple).

  3. #3
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    La solution du XmlDocument est bonne, mais si l'opération ne consiste qu'à de la lecture (pas d'écriture/modification du Xml) il est recommandé de passer par les classes relatives au XPath (XpathDocument/XpathNavigator/...) il me semble.
    Pas de questions techniques par MP

  4. #4
    Candidat au Club
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Le code...
    Re salut à tous,

    J'ai implémenté le code suivant pour mon pb mais celà ne fonctionne pas, qqn pourrait t'il me dire ce qui ne fonctionne 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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    Dim temprecord As New record
    Dim XmlDoc As XmlDocument = New XmlDocument()
     
    XmlDoc.Load(filename)
     
    Dim element As XmlNodeList
    element = XmlDoc.DocumentElement.GetElementsByTagName("Record")
     
    Dim node, childnode As XmlNode
     
    For Each node In element
     
       Dim temprecord As New record
       For Each childnode In node.ChildNodes
     
         If childnode.LocalName = "Date1" Then
            temprecord.Date1 = childnode.InnerText
         Else
            If childnode.LocalName = "Time1" Then
               temprecord.Time1 = childnode.InnerText
            Else
               If childnode.LocalName = "ID1" Then
                  temprecord.ID1 = childnode.InnerText
               Else
                  If childnode.LocalName = "ID2" Then
                     temprecord.ID2 = childnode.InnerText
                  Else
                     If childnode.LocalName = "ID3" Then
                        temprecord.ID3 = childnode.InnerText
                     Else
                        If childnode.LocalName = "TimeInterval" Then
                           temprecord.TimeInterval = childnode.InnerText
                        Else
                           If childnode.LocalName = "Response" Then
                              temprecord.Response = childnode.InnerText
                           Else
                              If childnode.LocalName = "Given" Then
                                temprecord.Given = childnode.InnerText
                          End If
                        End If
                      End If
                    End If
                 End If
               End If
            End If
          End If
        Next
        'ajout du record à l'arraylist de navigation.
        navigation.Add(temprecord)
        navIndex += 1
      Next
    'On remplit la forme avec le premier record de l'arraylist de navigation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    PopulateFormFromRecord(navigation(0))
    lblRecordNumber.Text = navIndex & " of " & navigation.Count
    Merci davance ^^

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Salut,

    Dans les tuto&sces il y a un exemple de xmlParser :

    http://dotnet.developpez.com/sources...=xml#xmldotnet

    Ce bout de code va naviguer à travers tout le XML et te donner le nom de tous les éléments, leurs attributs et leur valeur. A toi de le transformer au besoin.

    PS : Il y a une petite erreur ds la version C#

    à la place de

    Pour obtenir la valeur du noeud.

  6. #6
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Le code que je vais fournir répond à la question initiale, parce que le code donné par la suite ne correspond plus au fichier Xml donné au tout début. Mon code se base sur ce fichier mais est facilement adaptable au besoin.

    J'utilise l'espace de nom System.Xml.XPath et je ne passe donc pas par un XmlDocument. Si on fait de la lecture seule, l'utilisation des XPath est recommandé c'est donc pourquoi je les utilise dans le code qui suit
    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
    Imports System.Xml.XPath
    ...
    Private Sub TraiteXml()
    Dim doc As XPathDocument = New XPathDocument(fileName)
    Dim nav As XPathNavigator = doc.CreateNavigator
    ' On récupère un XPathNodeIterator sur les Record
    Dim iter As XPathNodeIterator = nav.Select_
    ("Recordbook/Records/Record")
    ' Pour chaque Record
    While iter.MoveNext
    ' On récupère l'info FirstValue
    Dim firstValue As String = iter.Current.SelectSingleNode_
    ("FirstValue").Value
    ' On récupère l'info SecondValue
    Dim secondValue As String = iter.Current.SelectSingleNode_
    ("SecondValue").Value
    End While
    End Sub
    Avec ceci je parcours chaque Record et j'en extrais les valeurs
    Pas de questions techniques par MP

  7. #7
    Candidat au Club
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Super!
    Merci à tous, ça m'aide vraiment super!

  8. #8
    Candidat au Club
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Aie aie aie!
    Salut à tous,

    Je rencontre toujours des pb quant à la lecture de mes fichiers xml...je pensais pourtant que ce pblème était résolu !

    voici donc le code de ma méthode et le fichier xml qui va avec en pièce jointe :

    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
     
            Dim doc As XPathDocument = New XPathDocument(filename)
     
            Dim nav As XPathNavigator = doc.CreateNavigator
     
            'On récupère un xpathnodeiterator sur les Record.
            Dim iter As XPathNodeIterator = nav.Select
    ("Recordbook/Records/Record")
     
               While iter.MoveNext
     
     
                Dim temprecord As New record
     
     
                temprecord.Date1 = iter.Current.SelectSingleNode("Date1").Value
     
                temprecord.Time1 = iter.Current.SelectSingleNode("Time1").Value
     
                temprecord.ID1 = iter.Current.SelectSingleNode("ID1").Value
     
                temprecord.ID2 = iter.Current.SelectSingleNode("ID2").Value
     
                temprecord.ID3 = iter.Current.SelectSingleNode("ID3").Value
     
                temprecord.TimeInterval = iter.Current.SelectSingleNode
    ("TimeInterval").Value
     
                temprecord.Resp = iter.Current.SelectSingleNode
    ("Response").Value
     
                temprecord.Given = iter.Current.SelectSingleNode("Given").Value
     
                navigation.Add(temprecord)
     
            End While
     
            navIndex = 1
            UpdateRecNumber()
            PopulateFormFromRecord(navigation(0))
    Le problème est semble-t-il qu'il ne récupère pas les données et qu'il n'ajoute pas l'objet temprecord à mon arraylist de navigation.

    Merci davance.
    Fichiers attachés Fichiers attachés

  9. #9
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    La raison est très simple, le XPath (dans ton cas "Recordbook/Records/Record") est sensible à la casse. Dans ton fichier Xml tes balises sont <Recordbook>, <Records> et <record> au lieu de <Record>

    Donc soit tu changes le XPath : "Recordbook/Records/record", soit tu restes homogène et tu ajoutes une majuscule au début des balises <record> pour qu'elles deviennent <Record>
    Pas de questions techniques par MP

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/09/2006, 08h33
  2. [VB6]comment lire un fichier XML
    Par leo13 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 09/05/2006, 13h16
  3. Réponses: 1
    Dernier message: 17/01/2006, 07h42
  4. Comment lire un fichier XML ?
    Par jeromelef dans le forum Débuter
    Réponses: 6
    Dernier message: 29/06/2005, 15h52

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