需要在VB6中解析XML。

10 浏览
0 Comments

需要在VB6中解析XML。

我有点保守,需要能够在VB6中解析此文档。




104.145.4.78
104.145.4.78
Allstream Corp.
Vancouver
CA
Canada
49.2551
-123.0667



有一个网站提供IP地址的位置信息,我需要为大约6000个地址提供城市名称,这是我能想到的最好的方法,但是我找不到从该页面获取数据的简单方法。

这是我正在使用的实际网站:

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

在这里任何帮助将不胜感激。我已经花了约6个小时来解决这个问题,我相信有一个简单的解决方法,但我找不到它是什么。

谢谢。

0
0 Comments

在VB6中解析XML的需求是因为需要从返回的数据中提取特定的结果。下面是一种解决方法:

首先,需要一个基本的辅助函数来切分输入的数据,如下所示:

' 旧式的切分函数
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

然后,可以按照以下方式使用该函数:

' 假设数据是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

此外,如果需要,还可以将上述切分函数扩展为将多个结果存储到数组中。

然而,这种方法存在一个问题,即如何将数据保存为XML格式。返回的数据是不正确的。这可能是问题的关键所在。使用以下代码从网页中获取数据,但似乎将所有的HTML都保存了下来:

Set objIE = CreateObject("InternetExplorer.Application")
strIPaddress = xlsWS1.cells(j + 2, 3).Value
objIE.Navigate ("http://api.geoiplookup.net/?query=" & strIPaddress)
objIE.Visible = True
str = objIE.Document.DocumentElement.innerHTML
Call GetToken(str, "city")

此外,如果可以以编程方式仅保存页面上的文本,将可以很容易地解决我的问题,但这正是我所困扰的地方。

你可以使用`Document.body.innerText`来获取不带HTML标签的XML部分。如果有任何问题,请随时提问以获取更多详细信息。

0