Lire des données xml avec visual basic 2010 [Résolu]

maxkun 47 Messages postés mercredi 2 décembre 2009Date d'inscription 29 mai 2015 Dernière intervention - 26 sept. 2011 à 10:09 - Dernière réponse : NHenry 14134 Messages postés vendredi 14 mars 2003Date d'inscription 23 avril 2018 Dernière intervention
- 13 avril 2012 à 21:43
Bonjour, voila, j'aimerai lire des données XML en vb, mais je débute et je ne vois pas comment faire, quelqu'un pourrait m'aider???

En gros j'ai le code suivant, et j'aimerai voir s'afficher dans ma console la donnée XXXX :

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<fax xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">



<value xsi:type="xsd:string">XXXX</value>


<files>
<file>
C:\XMediusFAX\Temp\457DD0EF-78B9-4712-89B8-92336C4D533F-500-IF.tiff


</file>
</files>

</fax> 


J'ai déja le code suivant (récupérer sur internet) mais 2 erreurs subsistent :
Imports System.Xml
Imports System.IO
Imports System.Data.OleDb

Module Module1

    Sub Main()

        Dim xDoc As MSXML.DOMDocument
        xDoc = New MSXML.DOMDocument
        Dim xPE As MSXML.IXMLDOMParseError
        If xDoc.load("C:\Documents and Settings\mdorget\Bureau\vraie_fax.XML") Then
            ' Le document a été chargé avec succès.
            ' Maintenant faites quelque chose d'intéressant.
            DisplayNode(xDoc.childNodes, 0)
        Else
            ' Impossible de charger le document
            Dim strErrText As String
            ' Obtient l'objet ParseError
            xPE = xDoc.parseError
            With xPE
                strErrText = "Your XML Document failed to load " & _
               "due the following error." & vbCrLf & _
               "Error #: " & .errorCode & ": " & xPE.reason & _
               "Line #: " & .line & vbCrLf & _
               "Line Position: " & .linepos & vbCrLf & _
               "Position In File: " & .filepos & vbCrLf & _
               "Source Text: " & .srcText & vbCrLf & _
               "Document URL: " & .url
            End With

            MsgBox(strErrText, vbExclamation)
        End If

        xPE = Nothing

        Console.ReadLine()
    End Sub

    Public Sub DisplayNode(ByRef Nodes As MSXML.IXMLDOMNodeList, _
     ByVal Indent As Integer)

        Dim xNode As MSXML.IXMLDOMNode
        Indent = Indent + 2

        For Each xNode In Nodes
            If xNode.nodeType = NODE_TEXT Then
                Debug.Print(Space$(Indent) & xNode.parentNode.nodeName & _
                 ":" & xNode.nodeValue)
            End If

                If xNode.hasChildNodes Then
                    DisplayNode(xNode.childNodes, Indent)
                End If
        Next xNode
    End Sub


End Module


La première erreur c'est que mon fichier ne se charge pas, j'ai l'erreur suivante.

La seconde erreur est que le type NODE_TEXT dans la fonction DisplayNode n'est pas reconnu.

Savez vous comment pallier a ces problèmes?

Cordialement maxkun.
Afficher la suite 

12 réponses

Répondre au sujet
maxkun 47 Messages postés mercredi 2 décembre 2009Date d'inscription 29 mai 2015 Dernière intervention - 28 sept. 2011 à 11:48
+3
Utile
Pour ceux que ça intéresse, ce code permet d'extraire une valeur selon un attribut :


Dim q = (From [property] In XDocument.Load("XMLFile1.xml").Element("fax").Element("properties").Elements("property")
                        Where [property].Attribute("name") = "ANI"
                        Select [property].Element("value").Value).SingleOrDefault()
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de maxkun
NHenry 14134 Messages postés vendredi 14 mars 2003Date d'inscription 23 avril 2018 Dernière intervention - 26 sept. 2011 à 12:40
0
Utile
Bonjour,


Il manque un espace entre les 2 éléments.

Sinon, ta ligne :
Dim xDoc As MSXML.DOMDocument
Me laisse penser que tu ne passe pas par les classes XML du Framework.
L'espace de nom est System.Xml, pas MSXml.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Commenter la réponse de NHenry
maxkun 47 Messages postés mercredi 2 décembre 2009Date d'inscription 29 mai 2015 Dernière intervention - 26 sept. 2011 à 13:17
0
Utile
En fait, je ne peux pas modifier le document xml car le programme que je code devra lire des documents xml de ce genre qui sont généré automatiquement, je dois donc arriver à lire ces données sans devoir toucher au document.

Sinon j'ai remplacé l'espace nom MSXml par System.Xml, mais ça ne passe plus.

Dim xDoc As System.Xml.DOMDocument


A mon avis j'ai du me planté.
Commenter la réponse de maxkun
NHenry 14134 Messages postés vendredi 14 mars 2003Date d'inscription 23 avril 2018 Dernière intervention - 26 sept. 2011 à 13:26
0
Utile
Bonjour,

Ce n'est pas :
Dim xDoc As System.Xml.DOMDocument
Mais :
Dim xDoc As System.Xml.XMLDocument
Regardes la doc MSDN.

Je pense que la balise

n'est pas correcte, mais mes connaissances en XML sont assez basiques.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Commenter la réponse de NHenry
maxkun 47 Messages postés mercredi 2 décembre 2009Date d'inscription 29 mai 2015 Dernière intervention - 26 sept. 2011 à 13:36
0
Utile
Pour la balise je me renseignerai, mais a priori je devrais faire avec je pense, sinon j'ai mis la ligne que tu m'as donner et j'ai 2 erreurs qui apparaissent :
If xDoc.Load("C:\Documents and Settings\mdorget\Bureau\vraie_fax.XML") Then

Ici ça me dit que l'expression ne produit pas de valeur.

xPE = xDoc.parseError

Et là que parseError n'est pas un membre de 'System.Xml.XmlDocument'.

Désolé si ses questions paraissent bêtes mais je débute en VB (même pas une semaine que j'ai commencé)
Commenter la réponse de maxkun
maxkun 47 Messages postés mercredi 2 décembre 2009Date d'inscription 29 mai 2015 Dernière intervention - 26 sept. 2011 à 15:21
0
Utile
Après quelques recherches j'ai fini par réussir à afficher la valeur que je voulais, tu avais raison, la balise était fausse.

Avant :
<value xsi:type="xsd:string">XXXX</value>



Après :
<value xsi:type="xsd:string">XXXX</value>



En revanche j'ai gardé le même code du début, sinon comment faut-il faire pour stocker les valeurs des balises values dans une variable à part? Sachant qu'il y en a plusieurs (ici j'ai réduit le fichier xml car trop long)
Commenter la réponse de maxkun
NHenry 14134 Messages postés vendredi 14 mars 2003Date d'inscription 23 avril 2018 Dernière intervention - 26 sept. 2011 à 18:57
0
Utile
Bonjour,

Avec un dictionnaire ou un tableau par exemple.

Sinon, autant que possible, il faut rester dans le framework, le code sera plus rapide et limite les risques de manque d'une dépendance.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Commenter la réponse de NHenry
maxkun 47 Messages postés mercredi 2 décembre 2009Date d'inscription 29 mai 2015 Dernière intervention - 27 sept. 2011 à 10:11
0
Utile
Ça se code comment tout ça?
Et si je veut simplement récupérer la valeur de chaque attribut de mon fichier xml je fais comment?
Commenter la réponse de maxkun
neyla2012 3 Messages postés jeudi 5 avril 2012Date d'inscription 10 avril 2012 Dernière intervention - 10 avril 2012 à 05:02
0
Utile
bonsoir
svp j'ai vraiment besoin d'aide j'ai rencontré les mêmes problèmes pour extraire mes données sous format xml (je veux extraire des informations concernant quelque balise mais sans attribut ) pour afficher le tout sur excel merci de me répondre
Commenter la réponse de neyla2012
NHenry 14134 Messages postés vendredi 14 mars 2003Date d'inscription 23 avril 2018 Dernière intervention - 10 avril 2012 à 12:47
0
Utile
Bonjour,

neyla2012, merci de détailler le problème et où il se situe (lecture XML, listage des balise, export dans Excel (à moins que tu ne soit déjà en VBA Excel et donc pas dans le sujet.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Commenter la réponse de NHenry
neyla2012 3 Messages postés jeudi 5 avril 2012Date d'inscription 10 avril 2012 Dernière intervention - 10 avril 2012 à 19:59
0
Utile
bonjour
voila la lecture xml se fait vu que en exécutant mon code il y'a toute les informations du fichier xml qui s'affiche ,mais c'est pas se que je veux ,exemple:
<date> 21_04_2011 <\date>
je voudrais affiché uniquement 21_04_2011
pour ensuite affiché tous ça ds une table excel date 21_04_2011
ET bien sur j'ai pas besoin de toute les balises donc je veux pouvoir les choisirs



pour le VBA excel j'ai réussi a importer les balises mais je veux pas toute les balise donc s'il y a un moyen de sélectionner uniquement les balises que je veux ,pourquoi pas !!
je compte sur votre aides merci de me reponde
Commenter la réponse de neyla2012
NHenry 14134 Messages postés vendredi 14 mars 2003Date d'inscription 23 avril 2018 Dernière intervention - 13 avril 2012 à 21:43
0
Utile
Bonjour,

En parcourant la liste des tes nœuds de manière récursive, tu devrais directement avoir la valeur.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Commenter la réponse de NHenry

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.