2017-12-23 29 views
0

저는 약간 오래된 학교이며 VB6에서이 문서를 구문 분석 할 수 있어야합니다. VB6에서 XML을 구문 분석해야합니다.

<ip> 
<results> 
<result> 
<ip>104.145.4.78</ip> 
<host>104.145.4.78</host> 
<isp>Allstream Corp.</isp> 
<city>Vancouver</city> 
<countrycode>CA</countrycode> 
<countryname>Canada</countryname> 
<latitude>49.2551</latitude> 
<longitude>-123.0667</longitude> 
</result> 
</results> 
</ip> 

은의 위치와 IP 주소의를 제공하는 웹 사이트입니다 그리고 난 6000 주소의 도시 이름을 넣어야이 내가하는 간단한 방법을 찾을 수 있다는 점을 제외하고 생각할 수있는 가장 좋은 방법입니다 이 페이지의 데이터를 가져 오십시오. 여기에 어떤 도움이 크게 appriciated 될

http://api.geoiplookup.net/?query=104.145.4.78 

:

여기 내가 사용하고있는 실제 웹 사이트입니다. 나는 이것을 알아 내기 위해 약 6 시간을 보냈으며 간단한 해결책이 있다고 확신하지만 그것이 무엇인지 알 수는 없다.

건배, 당신이 여기처럼, 당신의 입력 데이터를 토큰 화하는 것입니다 단지 단지 기본 도우미 기능을 필요 개별적으로 각각의 결과를 얻을 경우

+2

웹 스크래핑은 기껏해야 모호한 활동입니다. 해당 사이트의 이용 약관에 : "귀하의 허가없이 본 웹 사이트의 내용을 복사 할 수 없습니다." "귀하는 사전 서면 허가없이 스크립트, 에이전트, 응용 프로그램을 사용하거나이 웹 사이트를 자동으로 쿼리 할 수 ​​없습니다." 공용 웹 서비스를 기반으로하는 또 다른 솔루션을 찾는 시간. – Bob77

+0

MSXML 라이브러리를 찾았습니까? – DaveInCaz

답변

-2

:

' old school tokenizer 
Public Function GetToken(ByVal xmlIn As String, ByVal tagName As String) As Variant 
    Dim l as long, p1 As Long, p2 As Long 
    l = Len(tagName) 
    p1 = InStr(1, xmlIn, "<" + tagName + ">") 
    p2 = InStr(p1, xmlIn, "</" + tagName + ">") 
    GetToken = Mid(xmlIn, p1 + l + 2, p2 - p1 - l - 2) 
End Function 

...하는 당신을 다음과 같이 사용할 수 있습니다

' assume your data is in xml 
Dim result As String, ip As String, city As String 
result = GetToken(xml, "result") 
ip = GetToken(result, "ip") 
city = GetToken(result, "city") 

결과 :

Debug.Print ip, city => 104.145.4.78 Vancouver 

또한 원하는 경우 위의 토크 나이저를 쉽게 확장하여 여러 결과를 배열로 가져올 수 있습니다.

+0

이 작업은 작동하지만 데이터를 XML로 저장하는 방법은 무엇입니까? 반환되는 데이터가 올바르지 않습니다. 나는 이것이 내 문제의 핵심이라고 생각한다. 웹에서 데이터를 가져 오는 데 다음 코드를 사용하고 있지만 HTML을 모두 저장하는 것 같습니다. 집합 objIE = CreateObject ("InternetExplorer.Application") strIPaddress = xlsWS1.cells (j + 2, 3) .Value objIE.Navigate ("http://api.geoiplookup.net/?query="& strIPaddress) objIE.Visible = 진정한 STR = objIE.Document.DocumentElement.innerHTML 전화 GetToken (STR, "도시 ") 모든 도움을 주셔서 다시 한 번 감사드립니다. –

+0

또한 페이지의 텍스트를 프로그래밍 방식으로 저장하면 매우 쉽게 내 문제를 해결할 수 있었지만 그 부분은 내가 갇혀있는 곳입니다. –

+0

@SumeetBains : 'Document.body.innerText'를 사용하여 HTML 태그없이 xml 부분을 가져올 수 있습니다. 다른 문항을 좀 더 자세히 들으려면 약간의 문제가 있으시면 언제든지 문의하십시오. – deblocker