1

因此,我正要在 VBA 中完成我的地理编码脚本,但在 beta 测试期间,我注意到它无法提取大多数地址的数据,而对于其他地址,它工作得很好。代码如下:

Sub newReadXMLData(link As String)
Dim odc As DOMDocument
Dim lat As String
Dim lng As String
Dim location As IXMLDOMElement
Dim locationPath As String
Dim i As Integer

Set odc = New MSXML2.DOMDocument
odc.async = False
odc.Load (link)

locationPath = "GeocodeResponse/result/geometry[location_type='ROOFTOP']/location"
Set location = odc.SelectSingleNode(locationPath)

lat = GetTextValue(location, "./lat")
lng = GetTextValue(location, "./lng")

Debug.Print lat & "; " & lng

End Sub

Function GetTextValue(node As IXMLDOMElement, Optional xpath As String = "") As String
  Dim selectedNode As IXMLDOMElement

  If xpath <> "" And Not node Is Nothing Then
    Set selectedNode = node.SelectSingleNode(xpath)
  Else
    Set selectedNode = node
  End If

  If selectedNode Is Nothing Then
    GetTextValue = ""
  Else
    GetTextValue = Trim(selectedNode.Text)
  End If
End Function

该脚本返回正确的值,例如 forhttp://maps.googleapis.com/maps/api/geocode/xml?address=1+Infinite+Loop,+Cupertino,+Santa+Clara,+California+95014&sensor=false 但它不返回任何内容,例如http://maps.googleapis.com/maps/api/geocode/xml?address=BAGIENNA+13,+88-100+INOWROCŁAW&sensor=false。谁能解释这是为什么?

4

2 回答 2

2

我认为这可能是编码错误。我让你的两个字符串在浏览器中正常工作,但是当我尝试你的 VBA 代码时,第二个返回 ZERO_RESULTS. INOWROCŁAW中有一个字符在VBA 中似乎不起作用(我在 Word 2010 中尝试过)。

于 2012-11-17T09:43:18.333 回答
1

Olle Sjögren 似乎是对的——问题是由地址中的特殊字符引起的。一个简单的字符转换函数就可以完成这项工作。

于 2012-11-16T16:16:05.927 回答