【问题标题】:Not able to get data from XML file in VBA?无法从 VBA 中的 XML 文件中获取数据?
【发布时间】:2016-10-19 00:46:15
【问题描述】:

我正在尝试从 XML 文件中获取数据但无法获取。我不知道我在这里错过了什么。

XML 文件:

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

代码:

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()")

在上述情况下,SitesNamesURLs 什么也得不到。 如果我在这里遗漏了什么,有人可以建议我吗?

【问题讨论】:

    标签: xml vba


    【解决方案1】:

    由于SitesNamesURLsObject,你需要使用Set关键字。

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

    我很惊讶您没有收到错误消息,但这可能是因为 Object 是特价商品。

    由于SelectNodes 返回IXMLDOMNodeList,您可能希望将定义替换为:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-01
        • 1970-01-01
        • 2011-08-16
        • 1970-01-01
        • 1970-01-01
        • 2018-04-29
        • 2019-12-16
        相关资源
        最近更新 更多