• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 484
  • Last Modified:

Parse in Visual Basic

I am trying to write a script which would parse the id from the following snippet:

<form  method="post" action="/gp/checkout/address/edit.html/ref=ox_shipaddress_edit_addr_1" id="edit-joqkltnomp">
     
and insert it where ID is in the following snippet:

        Set FormElement = GWFO(iedoc, "getElementByid", VbMethod, 30, ID)
       FormElement.submit
the id in the first snippet is always a variable so I searched for the part of the snippet immediately before it which is a constant as follows:

(Body.innerHTML, "ox_shipaddress_edit_addr_1")

I am thinking if i create a string called IDString, for example, I can run the latter snippet as

      Set FormElement = GWFO(iedoc, "getElementByid", VbMethod, 30, IDString)
       FormElement.submit

I am just having a hard time figuring out how to parse the id and creating the string. Help much appreciated.
0
bpfsr
Asked:
bpfsr
  • 5
  • 2
1 Solution
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
Try something like this:
Dim IDString As String
Dim values As Variant
values = Split(Body.InnerHTML, "id=" & Chr(34))
If UBound(values) >= 1 Then
    values = Split(values(1), Chr(34))
    If UBound(values) >= 1 Then
        IDString = values(0)
        ' ...
        Set FormElement = GWFO(iedoc, "getElementByid", VbMethod, 30, IDString)
        FormElement.submit
    Else
        ' closing " was not found
    End If
Else
    ' id=" was not found
End If

Open in new window

0
 
bpfsrAuthor Commented:
I think you are close Idle but there is more than one "id=" in the HTML and it is picking up one of th eother ones. that is why I wanted to find the "ox_shipaddress_edit_addr_1" as that is unique. If I can find that first the "id=" after that will always be the id I am looking for.
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
Ah...try this modification then:
Dim IDString As String
Dim values As Variant

values = Split(Body.InnerHTML, "ox_shipaddress_edit_addr_1")
If UBound(values) >=1 Then
    values = Split(values(1), "id=" & Chr(34))
    If UBound(values) >= 1 Then
        values = Split(values(1), Chr(34))
        If UBound(values) >= 1 Then
            IDString = values(0)
            ' ...
            Set FormElement = GWFO(iedoc, "getElementByid", VbMethod, 30, IDString)
            FormElement.submit
        Else
            ' closing " was not found
        End If
    Else
        ' id=" was not found
    End If
Else
    ' ox_shipaddress_edit_addr_1 was not found
End If

Open in new window

0
Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
bpfsrAuthor Commented:
not working either. it looks likes its not finding "id=" as

values = Split(values(1), "id=" & Chr(34))
    If UBound(values) >= 1 Then
   
turns up ubound(values) = 0

0
 
bpfsrAuthor Commented:
From what I can tell you are trying to split the html from after the "ox_shipaddress_edit_addr_1"), then find the "id=" and parse the 34 characters after it; is that right? I did a

debug.print '|" & Body.innerHTML & '|"

and it looks like it is only splitting the last few paragraphs of the HTML (which is actually several pages long, with the "ox_shipaddress_edit_addr_1" we are looking for probably in the top quarter of the code)
there is an 'id=" in that last paragraph and it is pulling the script from after that, which in turn is not the right script. Is there a way to just parse the "id=" immediately after the "ox_shipaddress_edit_addr_1"  without doing the split as it seems the split is where the problem is...
0
 
aikimarkCommented:
why not use the XML DOM to get the data you want, rather than do string parsing?
0
 
bpfsrAuthor Commented:
???
0
 
bpfsrAuthor Commented:
Idle, it was very close but after playing with it this is what came to work:

      Set Body = GWFO(iedoc, "getElementsByTagName", VbMethod, 30, "BODY")(0)
            Debug.Print "|" & Body.innerHTML & "|"
            If InStr(Body.innerHTML, "ox_shipaddress_edit_addr_1") Then
            values = Split(Body.innerHTML, "ox_shipaddress_edit_addr_1")
                Debug.Print "|" & UBound(values) & "|"
                If UBound(values) >= 1 Then
                values = Split(values(1), "id=" & Chr(34))
                    If UBound(values) < 1 Then
                    values = Split(values(0), Chr(34))
                        If UBound(values) >= 1 Then
                        IDString = values(0)
                        IDString = Mid(IDString, 15, 10)
                        IDString = "edit-" & IDString
                        ' ...
                        Set FormElement = GWFO(iedoc, "getElementByid", VbMethod, 30, IDString)
                        FormElement.submit
                        Else
                        ' closing " was not found
                        End If
                    Else
                    ' id=" was not found
                    End If
                Else
                ' ox_shipaddress_edit_addr_1 was not found
                End If
            End If
 
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 5
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now