0

这是我的代码

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

不知道怎么解决,求大神帮忙!!!

4

2 回答 2

3

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

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  
于 2018-02-08T13:39:21.400 回答
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. 在 VBA 中组合两个 XMLnodelist
  2. XmlDocument.GetElementsByTagName 方法(字符串)
  3. VBA Web 服务 XML .responseXML 解析
  4. Node.ownerDocument
  5. 如何使用 vba 解析 XML
  6. HTML DOM 元素对象
  7. XmlHttpRequest – Excel VBA 中的 Http 请求
于 2018-02-08T08:15:47.907 回答