1

I'm struggling with reading my XML in VB and getting the data I want.

<?xml version="1.0" encoding="UTF-8"?> 
    <Install>
        <Package>
            <Name>Office2010</Name>
            <Path>C:\Windows\Office</Path>
            <Default>0</Default>
        </Package>
        <Package>
            <Name>CCleaner</Name>
            <Path>C:\Windows\Cleaner</Path>
            <Default>0</Default>
        </Package>
    </Install>

I'm trying to read a whole node at a time, so I can fetch all the values of it.

package.Name
package.Path
package.Default

Is this possible? I'm struggling with this for over 2 hours now. Thank you.

Jente
  • 612
  • 1
  • 8
  • 17

2 Answers2

3

You can use a simple For Each loop and XML literals, like:

' or load the XML with XDocument.Load(...) '
Dim xml = <Install>
            <Package>
                <Name>Office2010</Name>
                <Path>C:\Windows\Office</Path>
                <Default>0</Default>
            </Package>
            <Package>
                <Name>CCleaner</Name>
                <Path>C:\Windows\Cleaner</Path>
                <Default>0</Default>
            </Package>
        </Install>

' If you used XDocument.Load(...), use xml.Root.<Package> instead '
For Each package In xml.<Package>
    Console.WriteLine(package.<Name>.Value)
    Console.WriteLine(package.<Path>.Value)
    Console.WriteLine(package.<Default>.Value)
Next
sloth
  • 99,095
  • 21
  • 171
  • 219
  • I Really can't get this to work. Your example is working as expected, but when I try to read my XML file, I get an error or it thinks that my .xml is empty. Can somebody provide me with a quick snippet of XDocument.Load()? I Think I'm doing this wrong. – Jente Oct 01 '14 at 12:46
  • If you use `XDocument.Load(yourpath)` to load the XML, use `xml.Root.` instead of `xml.` – sloth Oct 01 '14 at 14:25
1
// parse your XML into an XDocument
Dim doc As XDocument = XDocument.Parse(xml)
// get "Install" element
Dim install As XElement = doc.Root

// iterate over "Package" elements in install
For Each package As XElement In install.Elements("Package")
    Dim name As String = package.Element("Name").Value
    Dim path As String = package.Element("Path").Value
    Dim def As String = package.Element("Default").Value
Next
Saeb Amini
  • 23,054
  • 9
  • 78
  • 76