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 exploiter les données extraites d'un XML dans un tableau ou DataSet?


Sujet :

VB.NET

  1. #1
    Membre actif Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Points : 295
    Points
    295
    Par défaut [VB.NET] Comment exploiter les données extraites d'un XML dans un tableau ou DataSet?
    Bonjour,


    Comme le titre l'indique, comment pourrais-je faire pour exploiter les données extraites d'un fichier XML pour les stocké dans un tableau ou DataSet?


    Quelqu'un a une idée?


    Merci

  2. #2
    Responsable .NET

    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut
    je suppose que tu charge tes données XML dans un XMLDocument. a l'aide d'une instruction Xpath tu récupère les nœuds dans un XMLNodeList ensuite tu boucle sur le XMLNodeList, tu récupère les données et tu charge dans ton tableau ou DataSet.

    @++
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  3. #3
    Membre actif Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Points : 295
    Points
    295
    Par défaut
    Je récupère mes valeurs ( des noeuds ) avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
           Dim xpathDoc As XPathDocument
            Dim xNavigator As XPathNavigator
            Dim xNodeIterator As XPathNodeIterator
            xpathDoc = New XPathDocument("c:\Test_1.xml")
            xNavigator = xpathDoc.CreateNavigator()
            xNodeIterator = xNavigator.Select(".//*")
            While (xNodeIterator.MoveNext())
                MessageBox.Show(xNodeIterator.Current.Name + " : " + xNodeIterator.Current.Value)
            End While
    Premièrement, c'est que je n'arrive pas à tout parcourir les noeuds, ya des noeuds vers la fin du fichier XML je n'ai plus de messages box, on dirait la fin du fichier même si c pas le cas ( normalement en Xpath .//* me donnera tout les noeud sans distinction non ? )

    Deuxièment, pour récupèrer ça dans un tableau? je dois récupérer les valeurs dans une variable puis un tableau ? je ne vois pas bien


    Merci

  4. #4
    Rédacteur

    Avatar de Jean-Michel Ormes
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    1 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 838
    Points : 4 574
    Points
    4 574
    Par défaut
    Bonsoir, je dis peut-être une bêtise mais pourquoi ne pas essayer de récupérer les valeurs avec une requête linq ?

  5. #5
    Membre actif Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Points : 295
    Points
    295
    Par défaut
    Salut Jean-Michel Ormes,

    Merci, oui pourquoi pas! tu peux m'eguiller plus?

  6. #6
    Rédacteur

    Avatar de Jean-Michel Ormes
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    1 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 838
    Points : 4 574
    Points
    4 574
    Par défaut
    Salut,

    Une requête linq fonctionne comme une requête SQL. Au vu de ton code, je dirais que tu peux essayer ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    var requete = from s in xpathDoc.Descendants("test") // Exemple de requête 
                          select s;
    Ensuite, tu peux réutiliser la variable requête dans un foreach pour remplir ton tableau en fonction de tes noeuds.

    PS : Il faut que tu rajoute des références à ton code (System; System.Linq; System.Xml.Linq

  7. #7
    Responsable .NET

    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut
    tssi555

    en Xpath .//* retourne tout les noeuds sans distinction en partant du contexte actuelle donc s'il y'a des noeuds qui ne font pas partir de ce contexte c'est normal que tu ne puisse pas lire ceux-ci.

    Jean-Michel Ormes


    A ce que je sache le XpathDocument n'a pas une méthode Descendants()

    @++
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  8. #8
    Rédacteur

    Avatar de Jean-Michel Ormes
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    1 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 838
    Points : 4 574
    Points
    4 574
    Par défaut
    Oui exact lilroma. Mais avec un XElement ça marche il me semble.

  9. #9
    Responsable .NET

    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut
    Citation Envoyé par Jean-Michel Ormes Voir le message
    Oui exact lilroma. Mais avec un XElement ça marche il me semble.
    Tu veut parler d'un XmlElement? la aussi je dirais non et un XmlElement ne permet pas de charger les données d'un fichier XML.

    @++
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  10. #10
    Membre actif Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Points : 295
    Points
    295
    Par défaut
    Merci à vous deux,

    Ce que je veux exactement, c'est de pouvoir lire mon fichier XML ( j'arrive à le parcourir ) et stocker les valeurs (en faisant la distinction entre tout les noeuds) soit dans un tableau soit dans un data set puis les afficher dans un datagridview, cette derniere solution sera l'idéale.

  11. #11
    Responsable .NET

    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut
    Fait voir le code que tu utilise pour parcourir ton fichier XML

    @++
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  12. #12
    Membre actif Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Points : 295
    Points
    295
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      Dim xpathDoc As XPathDocument
            Dim xNavigator As XPathNavigator
            Dim xNodeIterator As XPathNodeIterator
            xpathDoc = New XPathDocument("c:\test_1.xml")
            xNavigator = xpathDoc.CreateNavigator()
            xNodeIterator = xNavigator.Select(".//*")
            While (xNodeIterator.MoveNext())
                MessageBox.Show(xNodeIterator.Current.Name + " : " + xNodeIterator.Current.Value)
            End While

  13. #13
    Membre actif Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Points : 295
    Points
    295
    Par défaut
    Encore un autre pas en avant de fait,

    maintenant, j'arrive à charger le DataSet par les données du fichiers XML puis afficher tout ca dans un DataGridView, le problème c'est que j'ai que le premier contexte avec ses Nodes-Childs et donc une seule ligne dans le datagridview

    Je veux parcourir tout le fichier xml et avoir tout les données pour les afficher dans le gridview et pas seulement une partie.

    Mon code est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            Dim xmlDatadoc As New XmlDataDocument()
            xmlDatadoc.DataSet.ReadXml("C:\test_1.xml")
            Dim ds As New DataSet("ds_LoadXML")
            ds = xmlDatadoc.DataSet
            frmLoadXML.DataGridView1.DataSource = ds.DefaultViewManager
            frmLoadXML.DataGridView1.DataMember = "import_batch"
            frmLoadXML.Show()
    Merci

  14. #14
    Responsable .NET

    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut
    Dans ce cas tu ne doit pas passer par le Binding, puisque chaque contexte peut avoir sa propre structure XML c'est pour cella que c'est un seul contexte (par défaut le contexte courant) qui est charger dans le DGV.

    Et pour la lecture dans l'instruction Xpath je crois tu sera obliger a chaque de définir le contexte.

    @++
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  15. #15
    Membre actif Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Points : 295
    Points
    295
    Par défaut
    Merci, mais si tu veux bien me donner un exemple concret suite à mon code pour les deux cas que tu viens d'expliquer.
    Les deux solutions m'interesses, mais comme c ma première manipulation je ne vois pas bien comment faire.

  16. #16
    Responsable .NET

    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut
    Ok fait voir la structure de ton fichier XML pour que je puisse l'adapter a ton cas.

    @++
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  17. #17
    Membre actif Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Points : 295
    Points
    295
    Par défaut
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
      <?xml version="1.0" ?> 
    - <ASREQUEST_CIC_ASC>
    - <AS_REQUEST>
    - <ASREQUEST_INFO>
      <COMPANY>ZZZZ</COMPANY> 
      <JOB_NO /> 
      <ASC_CODE /> 
    - <PRODUCT>
    - <PRODUCTSHORT>
      <MODEL_CODE /> 
      <SERIAL_NO /> 
      <PURCHASE_DATE /> 
      </PRODUCTSHORT>
    - <SYMPTOM>
      <SYMPTOM1_DESC /> 
      <SYMPTOM2_DESC /> 
      <SYMPTOM3_DESC /> 
      </SYMPTOM>
      </PRODUCT>
    - <SERVICE>
      <SERVICE_TYPE /> 
      <SERVICE_TYPE_DESC /> 
      </SERVICE>
      <IN_OUT_WARRANTY /> 
      <REQUEST_DATE /> 
      <REQUEST_TIME /> 
      <REPAIR_ETD_DATE /> 
      <REPAIR_ETD_TIME /> 
    - <TRACKING>
      <TR_STATUS /> 
      <TR_STATUS_DESC /> 
      </TRACKING>
    - <TRREASON>
      <TR_REASON /> 
      <TR_REASON_DESC /> 
      </TRREASON>
      <INQUIRY_TEXT /> 
      <REF_NO /> 
      </ASREQUEST_INFO>
    - <CONSUMER_INFO>
      <BP_NO>EMPTY</BP_NO> 
    - <CUSTNAME>
      <TITLE /> 
      <FIRST_NAME /> 
      <LAST_NAME /> 
      </CUSTNAME>
    - <PHONE>
      <TEL_NUMBER1 /> 
      <TEL_NUMBER2 /> 
      <TEL_NUMBER3 /> 
      <FAX_NUMBER /> 
      <E_MAIL /> 
      </PHONE>
    - <ADDRESS>
      <ADDRESS_NUMBER /> 
      <COUNTRY /> 
      <REGION /> 
      <POST_CODE /> 
      <CITY /> 
      <STREET /> 
      <HOUSE_NUMBER /> 
      <ROOM_NUMBER /> 
      <FLOOR /> 
      </ADDRESS>
      </CONSUMER_INFO>
    - <DEALER_INFO>
      <BP_NO>EMPTY</BP_NO> 
    - <CUSTNAME>
      <TITLE /> 
      <FIRST_NAME /> 
      <LAST_NAME /> 
      </CUSTNAME>
    - <PHONE>
      <TEL_NUMBER1 /> 
      <TEL_NUMBER2 /> 
      <TEL_NUMBER3 /> 
      <FAX_NUMBER /> 
      <E_MAIL /> 
      </PHONE>
    - <ADDRESS>
      <ADDRESS_NUMBER /> 
      <COUNTRY /> 
      <REGION /> 
      <POST_CODE /> 
      <CITY /> 
      <STREET /> 
      <HOUSE_NUMBER /> 
      <ROOM_NUMBER /> 
      <FLOOR /> 
      </ADDRESS>
      </DEALER_INFO>
      </AS_REQUEST>
      </ASREQUEST_CIC_ASC>

  18. #18
    Responsable .NET

    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut
    Ce que tu a poster je ne voie qu'un seul contexte si ta plusieurs nœuds
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <ASREQUEST_CIC_ASC>
    </ASREQUEST_CIC_ASC>
    Ce que tu va faire c'est ajouter une balise globalisante et le nœud ci-dessus serons des nœuds enfant. La tu va te retrouver avec un seul contexte et ainsi pouvoir charger toute tes données dans le DataSet et le DGV.

    @++
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  19. #19
    Membre actif Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Points : 295
    Points
    295
    Par défaut
    Bah non!! pourquoi un seul contexte ?

    Ya aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <AS_REQUEST>
    </AS_REQUEST>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <PRODUCT>
    </PRODUCT>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    <PRODUCTSHORT>
    </PRODUCTSHORT>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <TRACKING>
    </TRACKING>
    Et bien tout les autres noeuds et noeuds-enfants contenus dans le fichier soulevé ci-dessus!

    Tout ça entre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <ASREQUEST_CIC_ASC>  
    </ASREQUEST_CIC_ASC>

    C'est juste ils ne contiennent pas de valeurs ou contiennent une chaine vide entre les balises c'est tout et pas qu'il y'a un seul contexte dans le fichier.

  20. #20
    Membre actif Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Points : 295
    Points
    295
    Par défaut
    Bonjour,

    Pour finir, je charge mes données XML dans un DataSet (et pas dans un simple tableau ) puis je les affiches dans un DataGridView, c'est plus pratique et plus facile de les exploiter par la suite.

    Je donne le lien de la msdn au cas cela pourra aider quelqu'un
    http://msdn.microsoft.com/en-us/library/ekw4dh3f.aspx

Discussions similaires

  1. Comment extraire les données d'un fichier txt dans un tableau excel
    Par mirage23 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/11/2012, 09h16
  2. Réponses: 2
    Dernier message: 22/02/2009, 13h02
  3. Réponses: 9
    Dernier message: 21/02/2007, 10h09
  4. Réponses: 3
    Dernier message: 31/01/2007, 17h46
  5. [cr 8.5] comment exploiter les données d'un "array"
    Par kikidrome dans le forum SAP Crystal Reports
    Réponses: 12
    Dernier message: 09/06/2005, 14h03

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