2010-02-15 9 views
7

J'ai googlé pendant une heure ou deux sans aucune chance (j'aimerai penser que je suis aussi un super googler!), Alors je suis là.Lire XML sur VB.net

J'ai un fichier XML que j'utilise pour mes paramètres des programmes, il ressemble à ceci:

<?xml version="1.0" encoding="utf-8"?> 
<config> 
    <store> 
     <number>0323</number> 
     <address>address</address> 
     <phone>phone</phone> 
    </store> 

    <emailsettings> 
     <emailfrom>emailfrom</emailfrom> 
     <emailpass>pass</emailpass> 
     <emailsubject>received</emailsubject> 
     <smtpserver>smtp.gmail.com</smtpserver> 
     <smtpport>587</smtpport> 
     <enablessl>true</enablessl> 
     <emailbody>package received</emailbody> 
    </emailsettings> 
    <dbconfig> 
     <dbpath>path</dbpath> 
    </dbconfig> 
</config> 

Comment puis-je utiliser vb.net pour obtenir chaque élément et renvoyer une valeur spécifique que je veux ? En soi, je voudrais retourner <number> (sous <store>) dans textbox1, et <emailbody> (sous <emailsettings>) dans textbox2.

Aide pleaseeeeee! Merci :)

Répondre

18

Ah, un exemple parfait pour montrer les fonctionnalités XML de puissants VB.NET avec Framework 3.5:

Sub Main() 
    Dim xml = XDocument.Load("config.xml") 
    Console.WriteLine("Number: " & xml.<config>.<store>.<number>.Value) 
    Console.WriteLine("Body: " & xml.<config>.<emailsettings>.<emailbody>.Value) 
End Sub 

rendements:

Number: 0323 
Body: package received 
+1

Ceci est une excellente réponse, WAY mieux que ma réponse de sérialisation. Votre réponse est ce que je cherchais sur ma question: http://stackoverflow.com/questions/2253900/generics-and-duck-typing-xml-in-net S'il vous plaît ajouter cette réponse à ma question et je vais accepter. – Achilles

+0

Splendide, mais que se passe-t-il si vous avez plusieurs numéros d'un autre magasin comme fichier peut être un fichier de configuration pour plusieurs magasins? –

+0

@AhmedNazmy: 'Pour chaque magasin en XML. . '. Ensuite, à l'intérieur de la boucle, accédez 'store. .Valeur'. – Heinzi

1

Vous pouvez utiliser la sérialisation XML. Créez des classes qui représentent votre structure XML et utilisez la classe de sérialisation XML pour désérialiser les données. Une fois que vous avez fait cela, vous pouvez utiliser les données dans votre application.

est Ci-dessous un lien vers un exemple de MSDN:

http://msdn.microsoft.com/en-us/library/ms950721.aspx

+0

+1. Je l'utilise tout le temps quand je dois lire/écrire du XML que j'ai sous contrôle. – OregonGhost

5

Voici une application console en utilisant le support XML littérales VB.Net.

Module Module1 

    Sub Main() 

     Dim xElem = <config> 
         <store> 
          <number>0323</number> 
          <address>address</address> 
          <phone>phone</phone> 
         </store> 

         <emailsettings> 
          <emailfrom>emailfrom</emailfrom> 
          <emailpass>pass</emailpass> 
          <emailsubject>received</emailsubject> 
          <smtpserver>smtp.gmail.com</smtpserver> 
          <smtpport>587</smtpport> 
          <enablessl>true</enablessl> 
          <emailbody>package received</emailbody> 
         </emailsettings> 
         <dbconfig> 
          <dbpath>path</dbpath> 
         </dbconfig> 
        </config> 

     Dim number = xElem.<store>.<number>.Value 
     Dim emailbody = xElem.<emailsettings>.<emailbody>.Value 

     Console.WriteLine(String.Format("Number={0}", number)) 
     Console.WriteLine(String.Format("emailbody={0}", emailbody)) 
     Console.ReadLine() 

     '--- What it'd look like if you loaded from a file using XDocument.Load 
     Dim xDoc = XDocument.Load(New IO.StringReader(xElem.ToString)) 
     number = xDoc.Root.<store>.<number>.Value 
     emailbody = xDoc.Root.<emailsettings>.<emailbody>.Value 

     Console.WriteLine(String.Format("Number={0}", number)) 
     Console.WriteLine(String.Format("emailbody={0}", emailbody)) 
     Console.ReadLine() 


    End Sub 

End Module 

Les résultats seront:

Number=0323 
emailbody=package received 

Number=0323 
emailbody=package received 
+0

+1, puisque je ne comprends pas le downvote ... – Heinzi

+0

Merci pour le +1. :-) – Rick

+0

+1 pour profiter des fonctionnalités du langage génial – Jay

0

Si vous connaissez des jeux de données et datatables, c'est un moyen facile de le faire:

Dim DS As New DataSet 
DS.ReadXml("Data.xml") 

DataSets peuvent lire tout XML. Je l'utilise même pour appeler des services XML reposés.