我有一个来自HTML源代码的大字符串(大约1,000,000个字符)。我正在使用msinet.ocx查看来自相应网站的文本。我写了一小段代码,以便找到一个关键短语(“pkid =”),它发生在不同的关键短语(“组件附件矩阵”)之前,但它无法正常工作。这就是我现在所拥有的:
workbench = Cells(columnNumber, 1).Value
myURL = "http://beams.us.yazaki.com/Beams/ViewDetails.aspx?topic=document&pkid=" _
& workbench
Dim inet1 As Inet
Dim mypage As String
Set inet1 = New Inet
With inet1
.Protocol = icHTTP
.URL = myURL
mypage = .OpenURL(.URL, icString)
End With
CAMnum = InStr(mypage, "Component Accessory Matrix")
intStart = InStrRev(mypage, "pkid=", CAMnum) + 5
newnum = Mid(mypage, intStart, 6)
Cells(columnNumber, 2).Value = newnum
问题似乎是mypage = .OpenURL(.URL, icString)
;当我运行len(mypage)
时,它返回大约100,000的值,当它应返回大约一百万的值时。有人可以解释一下吗?
答案 0 :(得分:1)
使用InStr
和InStrRev
,找到您的字符串,然后向后看。一旦你有了这个位置,从那里向前看,直到我们找到引号字符。最后,使用这些位置来获取字符串
pos1 = InStrRev(YourXMLString, "pkid=", InStr(YourXMLString, "Component Accessory Matrix")) + 5 ' length of "pkid="
pos2 = InStr(pos1, YourXMLString, Chr(34)) ' Chr(34)="
FoundString = Mid$(YourXMLString, pos1, pos2 - pos1)
请注意,如果“组件附件矩阵”缺失,或者之前没有“pkid =”,或者报价不是分隔符,或者更多文本介于 pkid = 和引号之间,代码将失败和/或产生无意义的结果。
答案 1 :(得分:1)
使用HTML DOM。
将文本加载到HTML文档中:
Dim html As Object ' MSHTML.HTMLDocument
Set html = CreateObject("htmlfile")
html.body.innerHTML = "your HTML code here"
使用getElementsByTagName获取td
元素的集合:
Dim tdElements As Object ' MSHTML.IHTMLElementCollection
Set tdElements = html.getElementsByTagName("td")
循环浏览它们,直到找到内部文本为“Component Accessory Matrix”的文本,然后抓取上一个td
元素的内部文本。
Dim tdElement As Object ' MSHTML.IHTMLElement
Dim i As Long
Dim textToParse As String
For i = 1 to tdElements.Count
If tdElements.Item(i).innerText = "Component Accessory Matrix" Then
' get previous <td>
Set tdElement = tdElements.Item(i - 1)
textToParse = tdElement.innerText
Exit For
End If
Next i
使用传统方法解析字符串
我会将结果字符串拆分为=
并取第二个元素,然后将该字符串拆分为"
并取第一个元素。这样就离开了300451
。