2010-02-15 14 views
7

Ho cercato su Google l'ultima ora circa senza fortuna (mi piacerebbe pensare di essere un grande googler anche io!), Quindi eccomi qui.Leggi XML in VB.net

Ho un file XML che sto usando per le mie impostazioni di programmi, sembra in questo modo:

<?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> 

Come posso utilizzare vb.net per ottenere ogni elemento e restituire un valore specifico che voglio ? Mi piacerebbe restituire <number> (sotto <store>) nella casella di testo1 e <emailbody> (nella casella <emailsettings>) nella casella di testo2.

Help pleaseeeeee! Grazie :)

risposta

18

Ah, un esempio perfetto per mettersi in mostra le potenti funzionalità XML di VB.NET con 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 

cede:

Number: 0323 
Body: package received 
+1

Questa è un'ottima risposta, molto meglio della mia risposta di serializzazione. La tua risposta è ciò che stavo cercando sulla mia domanda: http://stackoverflow.com/questions/2253900/generics-and-duck-typing-xml-in-net Si prega di aggiungere questa risposta alla mia domanda e accetterò. – Achilles

+0

Splendido, ma se si dispone di più numero di un altro negozio come file potrebbe essere un file di configurazione per più negozi? –

+0

@AhmedNazmy: 'Per ogni negozio in xml. . '. Quindi, all'interno del ciclo, accedi a 'store. .Valore'. – Heinzi

1

È possibile utilizzare la serializzazione XML. Creare classi che rappresentano la struttura XML e utilizzare la classe di serializzazione XML per deserializzare i dati. Dopo averlo fatto, puoi utilizzare i dati nella tua applicazione.

Qui di seguito è un link ad un esempio da MSDN:

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

+0

+1. Lo uso sempre quando devo leggere/scrivere XML che ho sotto controllo. – OregonGhost

5

Ecco una console app utilizzando il supporto letterale VB.Net XML.

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 

I risultati saranno:

Number=0323 
emailbody=package received 

Number=0323 
emailbody=package received 
+0

+1, dal momento che non capisco il downvote ... – Heinzi

+0

Grazie per il +1. :-) – Rick

+0

+1 per sfruttare le fantastiche funzioni del linguaggio – Jay

0

Se si ha familiarità con serie di dati e DataTable, questo è un modo semplice per farlo:

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

DataSet in grado di leggere qualsiasi XML. Uso anche questo per chiamare i servizi XML abilitati al resto.