【问题标题】:VBA Excel MSXML2.XMLHTTP getelementsbytagname() not workingVBA Excel MSXML2.XMLHTTP getelementsbytagname()不起作用
【发布时间】:2018-02-08 21:39:21
【问题描述】:

这是我的代码

Sub loadrss()
    Dim http As Object, html As New HTMLDocument, topics As Object, titleElem As Object, topic As HTMLHtmlElement, i As Integer
    Set http = CreateObject("MSXML2.XMLHTTP")
    http.Open "GET", "http://antt.vn/rss/trang-chu.rss", False
    http.send
    html.body.innerHTML = http.responseText
    Set topics = html.getElementsByTagName("Item")
    i = 55
    For Each topic In topics
        Sheet7.Cells(i, 15).Value = topic.getElementsByTagName("title")(0).innerText
        Sheet7.Cells(i, 16).Value = topic.getElementsByTagName("link")(0).innerText
        Sheet7.Cells(i, 17).Value = topic.getElementsByTagName("pubDate")(0).innerText
        i = i + 1
    Next
End Sub

但它会提示此行出现错误

Sheet7.Cells(i, 15).Value = topic.getElementsByTagName("title")(0).innerText

我不知道怎么解决,请帮忙!!!

【问题讨论】:

  • 哪个错误?当你用谷歌搜索错误代码时,你学到了什么?到目前为止,您还尝试了哪些其他方法来解决此问题? “不工作” 描述性不强。
  • 实际上我已经看到了一些问题;我给你一个提示:拼写和准确性很重要!为了帮助您找到问题,请将这一行 Option Explicit 添加为模块的第一行。在故障排除时,尤其是在学习时,它是 [any] 模块的一个简单但重要的补充,它会迫使您在尝试运行代码时正确声明和拼写变量、对象、属性等的名称。
  • “运行时错误'91':对象变量或未设置块变量”我认为问题出在“antt.vn/rss/trang-chu.rss”,我的代码与另一个网站一起工作,但是这个, 有问题吗?我认为!!!我不是程序员,英语也不好,抱歉:D
  • 您的提要是 XML,而不是 HTML。它们并不是真正可以互换的。 stackoverflow.com/questions/32232739/get-attribute-from-xml-rss

标签: excel vba getelementsbytagname msxml2


【解决方案1】:

试试下面的代码。它应该会获取您所追求的所有值。

Sub XML_Parsing_ano()
    Dim http As New XMLHTTP60
    Dim xmldoc As Object, post As Object

    With http
        .Open "GET", "http://antt.vn/rss/trang-chu.rss", False
        .send
        Set xmldoc = CreateObject("MSXML2.DOMDocument")
        xmldoc.LoadXML .responseXML.XML
    End With

     For Each post In xmldoc.SelectNodes("//item")
        r = r + 1: Cells(r, 1) = post.SelectNodes(".//title")(0).Text
        Cells(r, 2) = post.SelectNodes(".//pubDate")(0).Text
        Cells(r, 3) = post.SelectNodes(".//link")(0).Text
    Next post
End Sub

或者,如果你想坚持.getElementsByTagName() 那么:

Sub XML_Parsing_ano()
    Dim http As New XMLHTTP60
    Dim xmldoc As Object, post As Object

    With http
        .Open "GET", "http://antt.vn/rss/trang-chu.rss", False
        .send
        Set xmldoc = CreateObject("MSXML2.DOMDocument")
        xmldoc.LoadXML .responseXML.XML
    End With

     For Each post In xmldoc.getElementsByTagName("item")
        r = r + 1: Cells(r, 1) = post.getElementsByTagName("title")(0).Text
        Cells(r, 2) = post.getElementsByTagName("pubDate")(0).Text
        Cells(r, 3) = post.getElementsByTagName("link")(0).Text
    Next post
End Sub

添加到库的参考:

Microsoft XML, v6.0  

【讨论】:

  • 感谢 QHarr 的加分。
  • 嗨,QHarr!您可以点击此链接查看更新:Link
  • 感谢您告诉我。我现在应该有一个公牛。
  • 嗨@SIM,它工作得很好。非常感谢你。我看到区别在于 xmldoc.LoadXML .responseXML.XML vs html.body.innerHTML = http.responseText
【解决方案2】:

我认为您需要探索与 XML 相关的 DOM 模型。否则,您最终将不得不尝试从OwnerDocument 中提取信息,类似于topics(0).OwnerDocument.DocumentElement.outerText

我对此很陌生,因此愿意对此提供反馈,但以下是我将采取的路线。

@Vityata 这里有一个很好的节点选择示例:Select a single node XML object using VBA

这是一个示例,可帮助您开始提取 pubDates。

Sub testing()

    Dim xmlhttp As XMLHTTP60

    Set xmlhttp = New MSXML2.ServerXMLHTTP60

    Dim objXML As MSXML2.DOMDocument60 'MSXML2.DOMDocument

    Set objXML = New MSXML2.DOMDocument60

    With xmlhttp
        .Open "GET", "http://antt.vn/rss/trang-chu.rss", False
        .Send
     Set objXML = .responseXML
    End With

    Dim elemList As IXMLDOMNodeList
    Dim elem As IXMLDOMNode
    Set elemList = objXML.GetElementsByTagName("pubDate")

    For Each elem In elemList

       Debug.Print elem.nodeTypedValue

    Next elem

End Sub

参考(没有特别的顺序 - 这是我快速浏览以掌握导航的内容):

  1. Combine two XMLnodelist in VBA
  2. XmlDocument.GetElementsByTagName Method (String)
  3. VBA Web Services XML .responseXML parse
  4. Node.ownerDocument
  5. How to parse XML using vba
  6. The HTML DOM Element Object
  7. XmlHttpRequest – Http requests in Excel VBA

【讨论】:

    猜你喜欢
    • 2018-02-25
    • 2017-04-22
    • 2021-12-20
    • 1970-01-01
    • 2017-12-25
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    相关资源
    最近更新 更多