0

我有一个来自 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 的值,而它应该返回大约一百万的值。有人可以解释一下吗?

4

2 回答 2

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")  
    
  • 循环遍历它们,直到找到内部文本为“组件附件矩阵”的那个,然后获取前一个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.

如果您需要,这里还有一个示例

于 2012-07-10T16:18:38.800 回答
1

使用InStrand 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=和引号之间有更多文本,则代码将失败和/或产生无意义的结果。

于 2012-07-10T15:43:36.363 回答