0
我正試圖使用MSXML6提取美國專利。如何在VBA中使用MSXML通過標籤名稱提取單個HTML元素的文本?
在USPTO網站上專利文獻的全文html視圖中,專利標題顯示爲第一個也是唯一一個「body」子元素的「font」元素。
這是我的功能不工作(我沒有錯誤;公式的單元格保持空白)。
有人能幫我弄清楚什麼是錯的嗎?
Function getUSPatentTitle(url As String)
Static colTitle As New Collection
Dim title As String
Dim pageSource As String
Dim xDoc As MSXML2.DOMDocument
Dim xNode As IXMLDOMNode
On Error Resume Next
title = colTitle(url)
If Err.Number <> 0 Then
Set html_doc = CreateObject("htmlfile")
Set xml_obj = CreateObject("MSXML6.XMLHTTP60")
xml_obj.Open "GET", url, False
xml_obj.send
pageSource = xml_obj.responseText
Set xml_obj = Nothing
Set xDoc = New MSXML2.DOMDocument
If Not xDoc.LoadXML(pageSource) Then
Err.Raise xDoc.parseError.ErrorCode, , xDoc.parseError.reason
End If
Set xNode = xDoc.getElementsByTagName("font").Item(1)
title = xNode.Text
If Not title = "" Then colTitle.Add Item:=title, Key:=url
End If
On Error GoTo 0 ' I understand "GoTo" is dangerous coding but copied from somebody and so far haven't thought of a more natural substitute for a GoTo statement
getUSPatentTitle = title
End Function
感謝codersl - 我不得不添加一個參考:工具>參考> Microsoft HTML對象庫,和它的作品。我知道那裏有更多的「字體」元素,但一直試圖直接在「body」下找到第一個,忘記改變索引。另外我看到它顯然是基於零的。在VBA中是否沒有類似於Java中的Jsoup方法的「select」方法,我可以說類似於'Element element = Document.select(「html> body> font」)。get(0)'?在這種情況下,效果會更好,因爲有時在標題上面可能會有一個「font」元素,但是在表格內。 – PatentWookiee
不幸的是,我不知道在VBA中有一個等效的「選擇」方法。 – codersl