Comment creer un parseur xml en vb.net

Résolu
samia_86 Messages postés 38 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 31 juillet 2009 - 30 déc. 2008 à 11:36
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

12 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
30 déc. 2008 à 18:17
Bonjour,

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

http://nhen0039.chez-alice.fr/index.php
3
samia_86 Messages postés 38 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 31 juillet 2009 2
30 déc. 2008 à 18:58
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
3
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
30 déc. 2008 à 23:21
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
3
samia_86 Messages postés 38 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 31 juillet 2009 2
31 déc. 2008 à 10:06
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+
3

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

Posez votre question
samia_86 Messages postés 38 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 31 juillet 2009 2
31 déc. 2008 à 10:28
dsl j'ai oublier ca:
</NewDataSet>
3
samia_86 Messages postés 38 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 31 juillet 2009 2
31 déc. 2008 à 17:03
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+
3
samia_86 Messages postés 38 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 31 juillet 2009 2
31 déc. 2008 à 12:10
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
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
31 déc. 2008 à 12:53
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
0
samia_86 Messages postés 38 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 31 juillet 2009 2
31 déc. 2008 à 13:38
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
0
samia_86 Messages postés 38 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 31 juillet 2009 2
31 déc. 2008 à 13:42
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?
0
samia_86 Messages postés 38 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 31 juillet 2009 2
31 déc. 2008 à 13:49
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>
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
31 déc. 2008 à 13:51
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
0
Rejoignez-nous