Reputation: 207
I have googled for the last hour or so with no luck (I'd like to think I'm a great googler too!), so here I am.
I have an XML file that I'm using for my programs settings, it looks like so:
<?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>
How can I use vb.net to get each element and return a specific value that I want? Per se, I'd like to return <number>
(under <store>
) in textbox1, and <emailbody>
(under <emailsettings>
) in textbox2.
Help pleaseeeeee! Thanks :)
Upvotes: 8
Views: 21766
Reputation: 5545
If you are familiar with datasets and datatables, this is an easy way to do it:
Dim DS As New DataSet
DS.ReadXml("Data.xml")
DataSets can read any XML. I even use this to call rest-enabled XML services.
Upvotes: 0
Reputation: 172200
Ah, a perfect example for showing off the powerful XML features of VB.NET with 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
yields:
Number: 0323
Body: package received
Upvotes: 22
Reputation: 5039
Here's a Console app using the VB.Net XML Literal support.
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
The results will be:
Number=0323 emailbody=package received Number=0323 emailbody=package received
Upvotes: 5
Reputation: 11299
You can use XML Serialization. Create classes that represent your XML structure and use the XML Serialization Class to deserialize the data. Once you have done that you can use the data in your application.
Below is a link to an example from MSDN:
http://msdn.microsoft.com/en-us/library/ms950721.aspx
Upvotes: 1