Comment creer un parseur xml en vb.net [Résolu]

Messages postés
38
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
31 juillet 2009
- - Dernière réponse : samia_86
Messages postés
38
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
31 juillet 2009
- 31 déc. 2008 à 17:03
salut tout le monde,

j'ai un fichier xml et je vx le parser en vb.net ma question c :
 comment creer un parseur xml en vb.net qui parse des données de fichier xml et remplir une table sql server apartir des données de se fichier;
et merci bcp d'avance
Afficher la suite 

12 réponses

Meilleure réponse
Messages postés
14620
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 janvier 2020
138
3
Merci
Bonjour,

Pour le parseur XML : System.XML.
Pour l'accès à SQL Server, regarde sur le site.

http://nhen0039.chez-alice.fr/index.php

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 134 internautes nous ont dit merci ce mois-ci

Commenter la réponse de NHenry
Messages postés
38
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
31 juillet 2009
2
3
Merci
slt et merci bcp pour la reponse on faite j'ai chercher mais j'ai pa trouvé ce ke je vx voici ce ke j'ai fai j'ai accede au ficheir xml mai j'arive pa a inserer dansa la base de données sql server:
 voici mon code:

Imports

System
Imports

System.Xml
Imports

System.Collections
Imports

System.Data.SqlClient
Imports

System.Data
Namespace

ParserXML

Class Class1<STAThread()> _

Shared
Sub Main(
ByVal args
As
String())

'--- Demande du nom de fichierConsole.Write(

"Entrer le nom du fichier XML à parser : ")

Dim fichierXML
As
String = Console.ReadLine

'**********************

Dim connectionstring =
"chaine de connexion"

Dim connection
As
New SqlConnection(connectionstring)

Dim commande
As SqlCommand = connection.CreateCommand()

Dim SqlString
As
String

'**********************

Dim sNameElement
As
String

TrysNameElement =

""

'--- Déclaration et ouverture du fichier demandé

Dim reader
As XmlTextReader =
New XmlTextReader(fichierXML)

'--- Lecture

If connection.State = ConnectionState.Closed
Thenconnection.Open()

End
If

While reader.Read

Select
Case reader.NodeType

Case XmlNodeType.ElementsNameElement = reader.Name

If (sNameElement =
"ma premier balise dans le ficheir xml")
Thencommande.CommandType = Data.CommandType.StoredProcedure

'apler une procedure stocké
commande.CommandText =

"XML_INSERT_OT"

End
IfConsole.WriteLine(sNameElement)

Case XmlNodeType.EndElement

Dim sNameEndElement
As
String = reader.Name

If (sNameEndElement =
"ma premier balise dans le ficheir xml")
ThenMsgBox(commande.Parameters.ToString)

 

commande.ExecuteNonQuery()

End
If 

Console.WriteLine(sNameEndElement)

Case XmlNodeType.Attribute

Dim sNameAttribute
As
String = reader.NameConsole.WriteLine(sNameAttribute)

Case XmlNodeType.Text

Dim sNameText
As
String = reader.ValueConsole.WriteLine(sNameText)

 

If (sNameElement =
"ma 2eme balise dans le ficheir xml")
ThenMsgBox(

"ma 2eme balise dans le ficheir xml")commande.Parameters.Add(

"@1er parametre", SqlDbType.NVarChar).Value = sNameText

ElseIf (sNameElement =
"2eme parametre")
Thencommande.Parameters.Add(

"@2eme parametre", SqlDbType.NVarChar).Value = sNameText

End
If

End
Select

End
While

'--- Lit la ligne de caractères suivante à partir

'--- du flux d'entrée Console.ReadLine()

'MsgBox(commande.CommandText.ToString) 

connection.Close()

Catch Ex
As XmlException

Console.WriteLine("Erreur: " + Ex.Message)

End
Try

End
Sub

End
ClassEnd

Namespace

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 134 internautes nous ont dit merci ce mois-ci

Commenter la réponse de samia_86
Messages postés
14620
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 janvier 2020
138
3
Merci
Bonjour,

Peux-tu fournir ton fichier XML d'exemple ? Il me semble qu'il y ai un pb.

http://nhen0039.chez-alice.fr/index.php

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 134 internautes nous ont dit merci ce mois-ci

Commenter la réponse de NHenry
Messages postés
38
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
31 juillet 2009
2
3
Merci
bonjour et merci pr la reponse voila mon fichier xml:

 <?xml version="1.0" standalone="yes" ?>

[file:///E:/cours/parsur/bin/OTTestXml.xml# -]<NewDataSet>

[file:///E:/cours/parsur/bin/OTTestXml.xml# -]<commande>

 <CID>2</CID>

 <CNoBL>22</OTNoBL>

 <CDate>2008-12-24</OTDate>

 <CPrestation>44</CPrestation>

 <CCode>as</OTCode>

   </commande>

[file:///E:/cours/parsur/bin/OTTestXml.xml# -]<commande>

 <CID>2</CID>

 <CNoBL>2233</OTNoBL>

 <CDate>2008-12-255</OTDate>

 <CPrestation>4433</CPrestation>

 <CCode>DSS123</OTCode>

   </commande>

Merci de me repondre
A+

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 134 internautes nous ont dit merci ce mois-ci

Commenter la réponse de samia_86
Messages postés
38
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
31 juillet 2009
2
3
Merci
dsl j'ai oublier ca:
</NewDataSet>

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 134 internautes nous ont dit merci ce mois-ci

Commenter la réponse de samia_86
Messages postés
38
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
31 juillet 2009
2
3
Merci
slt c moi ça marche b1 d'abord j'ai ajouter



commande.Parameters.Clear()
aprés



commande.ExecuteNonQuery()
et ca marceh maintenant merci atous et bonne annés

samia
A+

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 134 internautes nous ont dit merci ce mois-ci

Commenter la réponse de samia_86
Messages postés
38
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
31 juillet 2009
2
0
Merci
c moi toujours voici l'erreur ki s'affiche :

Procedure or function XML_INSERT_OT has too many arguments specified.

mon parseuril enregistre ke la premier ligne dans la base de donées sql server et je voi ke les autre ligne s'enregistre pa
aidez moi svp
Commenter la réponse de samia_86
Messages postés
14620
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 janvier 2020
138
0
Merci
Bonjour,

Ne mets pas réponse acceptée si ton pb n'est pas résolu, cela t'empêchera de faire venir d'autres personnes sur ton sujet le croyant résolu.

Ton fichier XML (celui que tu as donné) est invalide :
<CDate>2008-12-24</OTDate>
Si tu ouvres un CDate, tu ferme un CDate, et pas un OTDate (et regarde bien ton fichier, il y a plein d'erreur).
Je me demande comment ça fonctionnait avant.

Ensuite, il y a dans ton code cette ligne :
While reader.Read

En clair tu fais une ligne, ensuite, comme il y a rien à lire, tu sors, il faudrait plutôt regarder la fin de ton fichier XML.

Tu ne créé qu'une commande au départ, alors qu'il faudrait la recréée à chaque fois.

Tu n'a pas mis ton vrai code :
If (sNameElement = "ma 2eme balise dans le ficheir xml") Then
Ne correspond à rien de ton fichier XML.

J'attends ces quelques corrections avant d'aller plus loin.

http://nhen0039.chez-alice.fr/index.php
Commenter la réponse de NHenry
Messages postés
38
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
31 juillet 2009
2
0
Merci
ok et merci bcp voila j'ai corriger mon fichier xml voici le contenu:

 <?xml version= "1.0" standalone="yes" ?>







<


NewDataSet


>










     <


commande


>











    



<


CID


>


2


</C


ID


>











    



<C


NoBL


>


222


</


CNoBL


>











    



<C


Date


>


2008-12-24


</


CDate


>











    



<


CPrestation


>


44


</


CPrestation


>











    



<


CCode


>


as


</


CCode


>











 

  </commande>












     <commande>











    







<


CID


>



33



</C


ID


>







    



<C


NoBL


>


333


</


CNoBL


>











    



<C


Date


>


2008-12-23


</


CDate


>











    



<


CPrestation


>


4433


</


CPrestation


>











    



<


CCode


>


ZE33


</


CCode


>











 

  </commande>










</


NewDataSet


>






et mon fichier vb.net

*****************************************************************************
Imports

System
Imports

System.Xml
Imports

System.Collections
Imports

System.Data.SqlClient
Imports

System.Data
Namespace

ParserXML

Class Class1<STAThread()> _

Shared
Sub Main(
ByVal args
As
String())

'--- Demande du nom de fichierConsole.Write(

"Entrer le nom du fichier XML à parser : ")

Dim fichierXML
As
String = Console.ReadLine

'**********************

Dim connectionstring
As
String =
"Data Source=SWEET-55467CR6E\SQLEXPRESS;Initial Catalog=CommandeDB;Integrated Security=True"

Dim connection
As
New SqlConnection(connectionstring)

Dim commande
As SqlCommand = connection.CreateCommand()

Dim SqlString
As
String

'**********************

Dim sNameElement
As
String

TrysNameElement =

""

'--- Déclaration et ouverture du fichier demandé

Dim reader
As XmlTextReader =
New XmlTextReader(fichierXML)

'--- Lecture

If connection.State = ConnectionState.Closed
Thenconnection.Open()

End
If

While reader.Read

Select
Case reader.NodeType

Case XmlNodeType.ElementsNameElement = reader.Name

If (sNameElement =
"commande")
Thencommande.CommandType = Data.CommandType.StoredProcedure

commande.CommandText =

"XML_INSERT_OT"

End
IfConsole.WriteLine(sNameElement)

Case XmlNodeType.EndElement

Dim sNameEndElement
As
String = reader.Name

If (sNameEndElement =
"cammande")
Then

'MsgBox(commande.Parameters.ToString)commande.ExecuteNonQuery()

End
IfConsole.WriteLine(sNameEndElement)

Case XmlNodeType.Attribute

Dim sNameAttribute
As
String = reader.NameConsole.WriteLine(sNameAttribute)

Case XmlNodeType.Text

Dim sNameText
As
String = reader.ValueConsole.WriteLine(sNameText)

If (sNameElement =
"CNoBL")
Then'MsgBox(

"CNoBL:" & sNameText)commande.Parameters.Add(

"@CNoBL", SqlDbType.NVarChar).Value = sNameText

ElseIf (sNameElement =
"CDate")
Then'MsgBox(

"CDate:" & sNameText)commande.Parameters.Add(

"@CDate", SqlDbType.DateTime).Value = sNameText

End
If

End
Select

End
While

'--- Lit la ligne de caractères suivante à partir

'--- du flux d'entrée Console.ReadLine()

'MsgBox(commande.CommandText.ToString) 

connection.Close()

Catch Ex
As XmlException

'Console.WriteLine("Erreur: " + Ex.Message)

End
Try

End
Sub

End
ClassEnd

Namespace******************************:********************************************************
voici la procedure stocké (en sql server):

*****************************
create

PROCEDURE XML_INSERT_OT
(@CNoBL

nvarchar(50
),@CDate

datetime)

as

INSERT

INTOOT

([CNoBL]
, [CDate]
)
VALUES

(@CNoBL
, @CDate
)*******************************************
enfaite ce parseur il arrive a lire lire le fichier xml et il enregistre ke la 1er commande c a d <CNoBL>222</CNoBL>

<CDate>2008-12-24</CDate>
et les autres commande s'enregistre pas.
je veu ke mon parseur enregistre tout les commandes dans ma base de données xml.

merci bcp autre fois
Commenter la réponse de samia_86
Messages postés
38
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
31 juillet 2009
2
0
Merci
et tjr meme erreur:
Procedure or function XML_INSERT_OT has too many arguments specified.

je croi ke ce parsseur il arrive pas a memorisé les autre enregistrement.
 c ça?
Commenter la réponse de samia_86
Messages postés
38
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
31 juillet 2009
2
0
Merci
voici le fichier xml parce ke k'on je poste j voi k'il ya des espase entre les mots dans le fichier xml:

<?xml version="1.0" standalone="yes" ?>

<NewDataSet>

     <commande>

    <CID>2</CID>

    <CNoBL>222</CNoBL>

    <CDate>2008-12-24</CDate>

    <CPrestation>44</CPrestation>

    <CCode>as</CCode>

   </commande>

     <commande>

    <CID>33</CID>

    <CNoBL>333</CNoBL>

    <CDate>2008-12-23</CDate>

    <CPrestation>4433</CPrestation>

    <CCode>ZE33</CCode>

   </commande>

</NewDataSet>
Commenter la réponse de samia_86
Messages postés
14620
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 janvier 2020
138
0
Merci
Bonjour,

Je te conseil plutôt de regarder du coté de System.Xml.XmlDocument et d'utiliser une fonction récursive.

Si tu utilises le système de coloration de CS, je te conseil de voir ce lien pour coloriser tes codes, car ce n'est pas clair le code affiché (retours à la lignes non désirés qui compliquent la lecture) : http://charles.racaud.free.fr/code-syntaxing/

http://nhen0039.chez-alice.fr/index.php
Commenter la réponse de NHenry