Nanji Mange
Nanji Mange

Reputation: 2265

Not able to get data from XML file in VBA?

I am trying to get data from XML file but can't get. I don't know what I am missing here.

XML File:

<?xml version="1.0" encoding="UTF-8"?>
<TestClass>
  <TestObject>
    <Site>Facebook</Site>
    <Name>ABC</Name>
    <URL>https://www.facebook.com/ABC/</URL>
  </TestObject>
  <TestObject>
    <Site>Facebook</Site>
    <Name>XYZ</Name>
    <URL>https://www.facebook.com/XYZ/</URL>
  </TestObject>
  <TestObject>
    <Site>Twitter</Site>
    <Name>ABC</Name>
    <URL>https://www.twitter.com/ABC/</URL>
  </TestObject>
  <TestObject>
    <Site>Facebook</Site>
    <Name>XYZ</Name>
    <URL>https://www.twitter.com/XYZ/</URL>
  </TestObject>
</TestClass>

Code:

Dim oXMLFile As Object
 Dim XMLFileName As String
 Dim Sites As Object
 Dim Names As Object
 Dim URLs As Object

 Set oXMLFile = CreateObject("Microsoft.XMLDOM")
 XMLFileName = "C:\Users\abc\Desktop\Files\Test.xml"
 oXMLFile.Load (XMLFileName)
 If oXMLFile.Load(XMLFileName) Then
   ' The document successfully to load.
Else
   ' The document failed to load.
End If

Sites = oXMLFile.SelectNodes("TestClass/TestObject/Site/text()")
Names = oXMLFile.SelectNodes("TestClass/TestObject/Name/text()")
URLs = oXMLFile.SelectNodes("TestClass/TestObject/URL/text()")

In above case Sites, Names and URLs gets nothing. enter image description here Can anybody suggest me if I am missing anything here?

Upvotes: 1

Views: 1187

Answers (2)

Vincent G
Vincent G

Reputation: 3188

Since Sites, Namesand URLs are Object, you need to use theSet keyword.

Set Sites = oXMLFile.SelectNodes("TestClass/TestObject/Site/text()")
Set Names = oXMLFile.SelectNodes("TestClass/TestObject/Name/text()")
Set URLs = oXMLFile.SelectNodes("TestClass/TestObject/URL/text()")

I'm surprised you didn't get an error, but it may be because Object are specials.

Since SelectNodes returns a IXMLDOMNodeList, you might want to replace your definitions by:

Dim oXMLFile as DOMDocument
Dim Sites As IXMLDOMNodeList
Dim Names As IXMLDOMNodeList
Dim URLs As IXMLDOMNodeList

Upvotes: 1

jdweng
jdweng

Reputation: 34421

Try xml linq

Imports System.Xml
Imports System.Xml.Linq
Module Module1
    Const FILENAME As String = "c:\temp\test.xml"
    Sub Main()
        Dim doc As XDocument = XDocument.Load(FILENAME)

        Dim results = doc.Descendants("TestObject").Select(Function(x) New With { _
            .site = CType(x.Element("Site"), String), _
            .name = CType(x.Element("Name"), String), _
            .url = CType(x.Element("URL"), String) _
        }).ToList()
    End Sub

End Module

Upvotes: 1

Related Questions