maxkun
Messages postés52Date d'inscriptionmercredi 2 décembre 2009StatutMembreDernière intervention 2 novembre 2020
-
26 sept. 2011 à 10:09
NHenry
Messages postés15090Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention 6 novembre 2023
-
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 :
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.
maxkun
Messages postés52Date d'inscriptionmercredi 2 décembre 2009StatutMembreDernière intervention 2 novembre 20201 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()
NHenry
Messages postés15090Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention 6 novembre 2023159 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 ---
maxkun
Messages postés52Date d'inscriptionmercredi 2 décembre 2009StatutMembreDernière intervention 2 novembre 20201 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.
NHenry
Messages postés15090Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention 6 novembre 2023159 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 ---
Vous n’avez pas trouvé la réponse que vous recherchez ?
maxkun
Messages postés52Date d'inscriptionmercredi 2 décembre 2009StatutMembreDernière intervention 2 novembre 20201 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é)
maxkun
Messages postés52Date d'inscriptionmercredi 2 décembre 2009StatutMembreDernière intervention 2 novembre 20201 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)
NHenry
Messages postés15090Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention 6 novembre 2023159 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 ---
neyla2012
Messages postés3Date d'inscriptionjeudi 5 avril 2012StatutMembreDernière intervention10 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
NHenry
Messages postés15090Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention 6 novembre 2023159 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 ---
neyla2012
Messages postés3Date d'inscriptionjeudi 5 avril 2012StatutMembreDernière intervention10 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
NHenry
Messages postés15090Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention 6 novembre 2023159 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 ---