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 :

VB8 Recuper un contenu xml.


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 32
    Points : 5
    Points
    5
    Par défaut VB8 Recuper un contenu xml.
    Bonjour,

    J'ai fais un p'tit bout de code mais je ne sais pas pourquoi il ne marche pas...
    Regarder:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim MonNav As New WebBrowser   
                MonNav.Navigate("http://relayboard/status.xml")   
                MsgBox(MonNav.Document.GetElementById("led1"))
    Ce serait pour recuperer un contenu xml et ensuite l'afficher dans une msgbox par "ID"

    Exemple si je met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox(MonNav.Document.GetElementById("led1"))
    Le msgBox dois m'afficher 0
    et si c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox(MonNav.Document.GetElementById("led0"))
    Le msbBox dois m'afficher 1

    Voila ce qu'il y a dans le xml.

    <response>
    <led0>1</led0>
    <led1>0</led1>
    <led2>0</led2>
    <led3>0</led3>
    <led4>0</led4>
    <led5>0</led5>
    <led6>0</led6>
    <led7>0</led7>
    <btn0>up</btn0>
    <btn1>up</btn1>
    <btn2>up</btn2>
    <btn3>up</btn3>
    <an1>0</an1>
    <an2>0</an2>
    <time0>13:47:50</time0>
    </response>
    L'erreur dit que dans status.xml il n'y a rien...
    Vous pouvez m'aider ?

    Merci.

  2. #2
    tomny
    Invité(e)
    Par défaut
    Alors déjà vérifie que tu récupères du contenu dans ton document.
    Ensuite je ne suis pas sur que la méthode getelementbyid soit efficace car c'est une méthode pour un document html et non xml, et un id html est contenu dans l'attribut id d'une balise html.
    Donc je pense que le mieux pour travailler avec ton fichier est de le charger dans un objet xml et de n'utiliser ton navigateur que pour le récupérer.

    Cordialement,

    Thomas

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    après avoir vu ça sur le chat, Navigate n'est pas adapté pour récupérer un fichier xml comme ça

    http://support.microsoft.com/kb/301232

    Bon courage :p

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 32
    Points : 5
    Points
    5
    Par défaut
    Bon.

    Je me suis servi du site pour faire sa.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Const URLString As String = "http://relayboard/status.xml"
          Dim reader As XmlTextReader = New XmlTextReader(URLString)
          Do While (reader.Read())
             ' Traiter les données ici.
             If reader.Name = ("led1") Then
                MsgBox(reader.Value)
             End If
          Loop
       End Sub
    Le problème maintenant c'est que il n'y a pas la valeur dans la message box.
    Car le mon xml est en arbre il faux que j'ouvre l'arbre qui est comme ceci mais je ne sai pas comment faire...
    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
    - <response>
      <led0>0</led0> 
      <led1>0</led1> 
      <led2>0</led2> 
      <led3>0</led3> 
      <led4>0</led4> 
      <led5>0</led5> 
      <led6>0</led6> 
      <led7>0</led7> 
      <btn0>up</btn0> 
      <btn1>up</btn1> 
      <btn2>up</btn2> 
      <btn3>up</btn3> 
      <an1>0</an1> 
      <an2>0</an2> 
      <time0>10:39:13</time0> 
      </response>
    Il faux que je dissent de regardé dans reponse pour prend la valeur de "led1"
    mais je ne sais pas comment ouvrire reponse...



    Merci =)

  5. #5
    tomny
    Invité(e)
    Par défaut
    en fait le code que tu as permet de récupérer le fichier xml dans un flux texte, ensuite il te faut charger cela dans un objet xml Avec cet objet tu pourras parcourir ton xml avec le xpath, ou part noeud comme tu préfères.

    Cordialement.

    Thomas

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 32
    Points : 5
    Points
    5
    Par défaut
    Je ne connais pas le Xpath.
    Et coment faire le noeud?

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 32
    Points : 5
    Points
    5

  8. #8
    tomny
    Invité(e)
    Par défaut
    Colle le code xml que tu nous as donné sur la page dans le cadre de gauche, puis sélectionne xpath et dans la partie à droite en haut tu rentres ceci : response/led0
    Et il te sélectionnera le noeud voulu... c'est cela xpath.
    Ce système permet de se promener dans un xml via l'arborescence des balises et ainsi de récupérer un ou plusieurs noeud de ton xml.

    sinon en fouillant un peu il y a maintenant linq to xml !!!
    super simple pour obtenir des infos sur un xml. Voici le lien :
    LinqToXML

    Je pense que l'exemple devrait te montrer comment obtenir ce que tu souhaite

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 32
    Points : 5
    Points
    5
    Par défaut
    Nan c'est bon j'ai pas eu besoin de sa;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
          Const URLString As String = "http://relayboard/status.xml"
          Dim reader As XmlTextReader = New XmlTextReader(URLString)
          Do While (reader.Read())
             ' Traiter les données ici.
             If reader.Name = ("led1") Then
                reader.Read()
                MsgBox(reader.Value)
                Exit Do
             End If
          Loop
       End Sub
    J'ai reussi sa !!

    Mais maintenant j'ai encore un autre probleme mais je cherche encore un peux avant de posté ^^

  10. #10
    tomny
    Invité(e)
    Par défaut
    Ok recherche bien

    Par contre j'avais une petite question comment est construit le xml que tu reçois ??

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 32
    Points : 5
    Points
    5
    Par défaut
    En chiffre.

    1 ou 0 celon l'allumage...

    J'ai mis le xml plus haut.

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 32
    Points : 5
    Points
    5
    Par défaut
    Mais le msgbox etais pour voir la reponse maintenant que sa marche.
    Je vais suprimer le msgbox et le mettre dans un timer =)

  13. #13
    tomny
    Invité(e)
    Par défaut
    Je me suis mal exprimé, le fichier est construit par un programme ? il s'agit d'un export excel ? c'est quelqu'un qui le saisit ?

    Je pose la question car son contenu n'est pas très optimum dans sa grammaire.
    J'aurais plus vu une représentation ainsi :
    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
    <reponse>
      <leds>
        <led index="0">1</led>
        <led index="1">0</led>
        <led index="2">0</led>
        <led index="3">0</led>
        <led index="4">0</led>
        <led index="5">0</led>
        <led index="6">0</led>
        <led index="7">0</led>
      </leds>
      <btns>
        <btn index="0">up</btn> 
        <btn index="1">up</btn> 
        <btn index="2">up</btn> 
        <btn index="3">up</btn> 
      </btns>
      <ans>
        <an index="1">0</an> 
        <an index="2">0</an> 
      </ans>
      <time>
        <time index="0">10:39:13</time> 
      </times>
    </reponse>
    Cela permettrait d'utiliser complètement la puissance du xml.

    Le fichier tel que tu nous le donnes serait plus optimum sous forme de fichier ini ou sous forme de fichier plat. Tout dépend d'où vient le fichier et de l'interface de transfert que tu as ...

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 319
    Points : 414
    Points
    414
    Par défaut
    Bonjour

    De plus, avec l'idée de tomny, il sera possible d'utiliser du LinQ. ce qui facilitera l'acces aux informations du fichier XML.

    Il sera, par exemple, possible de faire des requêtes sur les leds en fonction de leur index ou de leur valeur.

    Nasty
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'TODO : trouver une signature mieux que celle la

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 32
    Points : 5
    Points
    5
    Par défaut
    Re. désolé jetai plongé dans mon code xD

    Euh le Fichier xml vien d'une entreprise... mais bon j'ai reussi se que je voulais merci.

    bref.
    Je suis revenue car j'ai un problème, toujour le meme code mais j'ai avancé le problème c'est que je lag a mort !!! avec le logiciel...
    Je pense que sa vien du timer (je suis sur )
    donc voici le code timer
    P'tit code:

    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
       Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
          Timer1.Enabled = False
          Try
             Const URLString As String = "http://relayboard/status.xml"
             Dim reader As XmlTextReader = New XmlTextReader(URLString)
             If reader IsNot Nothing Then
                Do While (reader.Read())
                   ' Traiter les données ici.
                   If reader.Name = ("led0") Then
                      reader.Read()
                      If reader.Value = 1 Then
                         Label1.BackColor = Color.Green
                      Else
                         Label1.BackColor = Color.Red
                      End If
                      Exit Do
                   End If
                Loop
             End If
          Catch ex As Exception
          End Try
          Try
             Const URLString As String = "http://relayboard/status.xml"
             Dim reader As XmlTextReader = New XmlTextReader(URLString)
             If reader IsNot Nothing Then
                Do While (reader.Read())
                   ' Traiter les données ici.
                   If reader.Name = ("led1") Then
                      reader.Read()
                      If reader.Value = 1 Then
                         Label2.BackColor = Color.Green
                      Else
                         Label2.BackColor = Color.Red
                      End If
                      Exit Do
                   End If
                Loop
             End If
          Catch ex As Exception
          End Try
          Try
             Const URLString As String = "http://relayboard/status.xml"
             Dim reader As XmlTextReader = New XmlTextReader(URLString)
             If reader IsNot Nothing Then
                Do While (reader.Read())
                   ' Traiter les données ici.
                   If reader.Name = ("led2") Then
                      reader.Read()
                      If reader.Value = 1 Then
                         Label3.BackColor = Color.Green
                      Else
                         Label3.BackColor = Color.Red
                      End If
                      Exit Do
                   End If
                Loop
             End If
          Catch ex As Exception
          End Try
          'Timer1.Enabled = True   
       End Sub
    'Timer1.Enabled = True
    Je l'ai mis en commentaire car sinon le PC EXPLOSE !!

    Edit je vien de rajouté un 4eme try

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 319
    Points : 414
    Points
    414
    Par défaut
    Whoua il est violent ton code! J'espère pour toi que tu n'as pas beaucoup de led.

    Essaye juste d'optimiser le traitement et ca devrait tourner un peu mieux.

    Deja, le fait de recharger a chaque fois le XMLTextReader, c'est un peu rude.
    Et puis si URLString est un constant ca sert a rien de le redefinir a chaque passage.

    Y'a plein de petits trucs a modifier pour que ca tourne mieux

    Nasty
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'TODO : trouver une signature mieux que celle la

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 32
    Points : 5
    Points
    5
    Par défaut
    Merci Nasty !!

    Mais J'ai 8 led

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 319
    Points : 414
    Points
    414
    Par défaut
    Avant que je ne dise des betises.
    XmlTextReader, ca fonctionne comme un SqlReader?

    Nasty
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'TODO : trouver une signature mieux que celle la

  19. #19
    tomny
    Invité(e)
    Par défaut
    Je ne sais pas comment fonctionne le sqlreader mais de ce que je me souviens le xmltextreader est un flux donc il re-télécharge le xml à chaque fois

    Effectivement il va te falloir optimiser ton code si tu ne veux pas exploser ton ordi

    Déjà une seul boucle de traitement pour un chargement de fichier, tu n'as pas besoin de plus.
    Une fonction générique pour l'allumage de tes labels qui prendrait ton label et la valeur en paramètre(ainsi tu n'aura qu'une seule à changer pour changer de couleur)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Do While (reader.Read())
                   If reader.Name = ("led0") Then
                      reader.Read()
                      If reader.Value = 1 Then
    Si je ne me trompe pas trop ici tu décales ton reader sur l'enregistrement d'après en refaisant appel à la méthode read() du coup ton reader.value ne correspond plus au reader testé.

    Je pense que tu pourrais essayé de gérer tes labels comme un tableau afin d'optimiser encore ton traitement

    Enfin voila des pistes pour améliorer ton code, est ce que cela t'a permis d'alléger ton application ?

    Cordialement,

    Thomas
    Dernière modification par Deepin ; 07/04/2010 à 17h49. Motif: Balises [CODE]...[/CODE] au lieu de [QUOTE]...[/QUOTE]

  20. #20
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 32
    Points : 5
    Points
    5
    Par défaut
    Re,

    Je testerais demain,

    J'avais mis des l'abel genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Label5.text = Label5.text - 1
    if Label5.text = 0 then
      Label5.text = 60
     
    'et ensuite les 4 try...

    J'avais fait sa !
    Et la sa ne lag pas.
    Mais se n'est pas digne d'un programmeur je cherche une autre solution...
    Mais si vraiment je trouve rien je reviendrais a sa...

Discussions similaires

  1. recuper le contenu d'un fichier xml dans un byte[]
    Par KING_OF_GRACELAND dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 13/03/2008, 12h03
  2. Saisie de contenu XML (Infopath, OOo...)
    Par Maximil ian dans le forum XML/XSL et SOAP
    Réponses: 22
    Dernier message: 21/10/2005, 16h30
  3. Réponses: 1
    Dernier message: 28/09/2005, 23h37
  4. [C#] Comment récuper un page xml avec une URL
    Par pc152 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/02/2005, 16h17
  5. OpenOffice comme éditeur WYSIWYG de contenu XML ?
    Par lilouTwo dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 01/07/2004, 14h43

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