需要在VB6中解析XML。
需要在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个小时来解决这个问题,我相信有一个简单的解决方法,但我找不到它是什么。
谢谢。
在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部分。如果有任何问题,请随时提问以获取更多详细信息。