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 :

lecture fichier XML


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2008
    Messages : 125
    Par défaut lecture fichier XML
    Bonjour à tous,

    je viens soliciter votre aide car je suis confronté à une situation assez complexe à mes yeux. En effet, on me demande de lire un fichier XML et de récupérer une valeur y figurant. Bon, jusque la, pas de problème. Mais la difficulté arrive lorsqu'il faut récupérer la valeur à intervalle régulier, soit par exemple, toute les 5 secondes. ça à l'air simple, mais j'avoue que j'ia un peu de mal la dessus

    Voici actuellement le code qui lit le fichier XML :

    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
    Imports System.Xml
    Imports System.Text
     
    PublicClass frmAnalyse
     
    Public received_time AsString = ""
    Public end_time AsString = ""
    Public percentage_processed AsInteger = 0
    Public description AsString = ""
    Public index_command AsString = ""
    
    PrivateSub frmAnalyse_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load
    Try
    timer1.Enabled = True
    timer1.Start()
    Catch ex As Exception
    MsgBox(ex.Message, MsgBoxStyle.Critical, "Erreur")
    EndTry
    EndSub
    
    PrivateSub timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tChekDrecompact.Tick
    Try
    Me.pbAnalyse.Maximum = 100
    bwAnalyse.RunWorkerAsync()
    Catch ex As Exception
    MsgBox(ex.Message, MsgBoxStyle.Critical, "Erreur")
    EndTry
    EndSub
    
    
    PrivateSub ReadXML(ByVal xnod As XmlNode)
    Dim xnodWorking As XmlNode
    Dim strValue AsString = CType(xnod.Value, String)
    If Len(strValue) > 0 Then
    SelectCase xnod.ParentNode.LocalName
    Case"received_time"
    received_time = xnod.Value
    IO.File.AppendAllText("C:\drecompact.log", received_time & vbNewLine)
    Case"end_time"
    end_time = xnod.Value
    IO.File.AppendAllText("C:\drecompact.log", end_time & vbNewLine)
    Case"percentage_processed"
    percentage_processed = xnod.Value
    IO.File.AppendAllText("C:\drecompact.log", percentage_processed & vbNewLine)
    Case"description"
    description = xnod.Value
    IO.File.AppendAllText("C:\drecompact.log", description & vbNewLine)
    Case"index_command"
    index_command = xnod.Value
    IO.File.AppendAllText("C:\drecompact.log", index_command & vbNewLine)
    EndSelect
    EndIf
    If xnod.HasChildNodes Then
    xnodWorking = xnod.FirstChild
    DoUntil IsNothing(xnodWorking)
    ReadXML(xnodWorking)
    xnodWorking = xnodWorking.NextSibling
    Loop
    EndIf
    EndSub
    
    PrivateSub bwAnalyse_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwAnalyse.DoWork
    'Parse le fichier XML...
    Dim xmlData AsNew XmlDocument
    xmlData.Load(My.Computer.FileSystem.SpecialDirectories.Temp & "\drecompact.xml")
    Dim xnod As XmlNode = xmlData.DocumentElement
    ReadXML(xnod)
    bwAnalyse.ReportProgress(percentage_processed)
    EndSub
    
    PrivateSub bwAnalyse_ProgressChanged(ByVal sender AsObject, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwAnalyse.ProgressChanged
    Me.pbAnalyse.Value = e.ProgressPercentage
    EndSub
    
    PrivateSub bwAnalyse_RunWorkerCompleted(ByVal sender AsObject, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwAnalyse.RunWorkerCompleted
    timer1.Stop()
    timer1.Enabled = False
    EndSub
     
    EndClass
    
    Ensuite, je suis preneur pour toute idée me permettant de récupérer cette valeur a intervalles réguliers. J'ai essayé avec un timer et un backgroundworker mais apparemment, ça ne fonctionne pas

    Merci à tous pour vos réponses.

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    ca me parrait faire beaucoup de code pour lire un fichier xml

    quelle taille fait le fichier xml ? (s'il est pas gros, c'est peut etre pas utile d'utiliser un autre thread, et donc un timer suffirait)
    y a des moyens mieux pour faire transiter des infos, m'enfin tu ne peux peut-etre pas changer la méthode si c'est un autre programme qui ne dépend pas de toi

    tu peux nous mettre le fichier xml en pièce jointe ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 388
    Par défaut
    +1

    En fait, si tu as déjà la fonction de lecture du fichier, il suffit de l'appeler à intervalle régulier avec un timer par exemple.

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2008
    Messages : 125
    Par défaut
    Oui, c'est ce que j'ai fait dans le code il me semble... Je vous joint le fichier xml. Il n'est pas spécialament gros, mais je dois récupérer une valeur qui évolue...

    Voici un bout du fichier :
    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
     
    <?xml version="1.0" encoding="UTF-8" ?> 
    - <autnresponse xmlns:autn="<a href="http://schemas.autonomy.com/aci/" target="_blank">http://schemas.autonomy.com/aci/</a>">
    <action>INDEXERGETSTATUS</action> 
    <response>SUCCESS</response> 
    - <responsedata>
    - <item>
    <id>48</id> 
    <origin_ip>172.16.2.4</origin_ip> 
    <received_time>2009/09/24 16:11:12</received_time> 
    <start_time>2009/09/24 16:11:13</start_time> 
    <end_time>2009/09/24 16:11:48</end_time> 
    <duration_secs>35</duration_secs> 
    <percentage_processed>100</percentage_processed> 
    <documents_processed>0</documents_processed> 
    <documents_deleted>0</documents_deleted> 
    <status>-1</status> 
    <description>Finished</description> 
    <docidrange /> 
    <index_command>/DRECOMPACT</index_command> 
    </item>
    - <item>
    <id>47</id> 
    <origin_ip>172.16.2.4</origin_ip> 
    <received_time>2009/09/24 15:54:35</received_time> 
    <start_time>2009/09/24 15:54:35</start_time> 
    <end_time>2009/09/24 15:55:12</end_time> 
    <duration_secs>37</duration_secs> 
    <percentage_processed>100</percentage_processed> 
    <documents_processed>0</documents_processed> 
    <documents_deleted>0</documents_deleted> 
    <status>-1</status> 
    <description>Finished</description> 
    <docidrange /> 
    <index_command>/DRECOMPACT</index_command> 
    </item>
    Il faut donc que je récupère la valeur "percentage_processed" qui évolue.

    Le timer insérer dans mon code ,'est pas oéprationnel ?

    Merci a tous pour vos réponses.

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    dans la sub tick de ton timer, appelle directement le traitment sans passer par le backgroundworker
    et met l'interval à 5 min (interval est en ms donc 5 * 60 * 1000)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2008
    Messages : 125
    Par défaut
    Bonjour a tous,

    Bon, je pense que je vais faire autrement. En réalité, il me faut juste les premières valeurs du fichier xml...

    <item>
    <id>48</id>
    <origin_ip>172.16.2.4</origin_ip>
    <received_time>2009/09/24 16:11:12</received_time> <start_time>2009/09/24 16:11:13</start_time>
    <end_time>2009/09/24 16:11:48</end_time>
    <duration_secs>35</duration_secs>
    <percentage_processed>100</percentage_processed>
    <documents_processed>0</documents_processed>
    <documents_deleted>0</documents_deleted>
    <status>-1</status>
    <description>Finished</description>
    <docidrange />
    <index_command>/DRECOMPACT</index_command>
    </item>
    ...afin de les mettre dans un tableau pour pouvoir ensuite effectuer des traitements sur les valeurs récupérées.

    Qu'en pensez vous ? Est-ce la bonne méthode ?

Discussions similaires

  1. lecture fichier XML
    Par bhahmed dans le forum C++Builder
    Réponses: 5
    Dernier message: 18/09/2006, 08h40
  2. [C#-XML] - Problème de lecture fichier XML
    Par Gloups dans le forum Windows Forms
    Réponses: 9
    Dernier message: 08/08/2006, 00h40
  3. Lecture fichier xml aux caracteres accentués
    Par LFC dans le forum Modules
    Réponses: 2
    Dernier message: 13/02/2006, 19h45
  4. Réponses: 3
    Dernier message: 09/12/2005, 17h42
  5. [SAX] Problème lecture fichier xml
    Par BernardT dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 07/07/2005, 18h11

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