Lire des données xml avec visual basic 2010

Résolu
maxkun Messages postés 52 Date d'inscription mercredi 2 décembre 2009 Statut Membre Dernière intervention 2 novembre 2020 - 26 sept. 2011 à 10:09
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 - 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.

12 réponses

maxkun Messages postés 52 Date d'inscription mercredi 2 décembre 2009 Statut Membre Dernière intervention 2 novembre 2020 1
28 sept. 2011 à 11:48
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()
3
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
26 sept. 2011 à 12:40
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
---
0
maxkun Messages postés 52 Date d'inscription mercredi 2 décembre 2009 Statut Membre Dernière intervention 2 novembre 2020 1
26 sept. 2011 à 13:17
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é.
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
26 sept. 2011 à 13:26
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
---
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
maxkun Messages postés 52 Date d'inscription mercredi 2 décembre 2009 Statut Membre Dernière intervention 2 novembre 2020 1
26 sept. 2011 à 13:36
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é)
0
maxkun Messages postés 52 Date d'inscription mercredi 2 décembre 2009 Statut Membre Dernière intervention 2 novembre 2020 1
26 sept. 2011 à 15:21
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)
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
26 sept. 2011 à 18:57
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
---
0
maxkun Messages postés 52 Date d'inscription mercredi 2 décembre 2009 Statut Membre Dernière intervention 2 novembre 2020 1
27 sept. 2011 à 10:11
Ç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?
0
neyla2012 Messages postés 3 Date d'inscription jeudi 5 avril 2012 Statut Membre Dernière intervention 10 avril 2012
10 avril 2012 à 05:02
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
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
10 avril 2012 à 12:47
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
---
0
neyla2012 Messages postés 3 Date d'inscription jeudi 5 avril 2012 Statut Membre Dernière intervention 10 avril 2012
10 avril 2012 à 19:59
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
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
13 avril 2012 à 21:43
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
---
0
Rejoignez-nous