我有一个Excel电子表格,其中有25,000多个带有纬度/经度坐标和其他数据的记录。我正在尝试使用Excel VBA脚本使用以下美国人口普查Web服务链接(包括示例坐标)基于纬度/经度查找关联的县名称。
https://geo.fcc.gov/api/census/block/find?latitude=40.000&longitude=-90.000&format=xml
这将返回以下响应xml。
<Response status="OK" executionTime="0">
<Block FIPS="170179601002012" bbox="-90.013605,39.996144,-89.994837,40.010663"/>
<County FIPS="17017" name="Cass"/>
<State FIPS="17" code="IL" name="Illinois"/>
</Response>
我遇到的问题是,我需要访问“县”节点中包含的“名称”值(在本例中为“ Cass”),并且该值将被复制到“县”列下的Excel电子表格中。有没有办法访问此值?XML响应不是我期望的标准格式(我是XML的新手),<County>Cass</County>
因此我不确定如何从此返回的响应中访问所需的值。
脚本的整个XML连接和响应部分似乎运行良好,我只需要知道如何从有问题的节点的响应中获取值即可。
这是我到目前为止所拥有的。任何帮助将不胜感激。如果您需要完整的代码,请告诉我。
standard XML connection stuff here...
XmlResponse = oXMLHTTP.responseText
'Process the XML to get County name
strXML = XmlResponse
Set XDoc = New MSXML2.DOMDocument60
If Not XDoc.LoadXML(XmlResponse) Then
Err.Raise XDoc.parseError.ErrorCode, , XDoc.parseError.reason
End If
Set xNode = XDoc.SelectSingleNode("/Response/County")
MsgBox xNode.Text
'Insert County name into Excel
Cells(i + 2, 14).Value = xNode.Text
我假设xNode.Text部分是我在从响应(?)中选择正确部分时需要帮助的地方。
非常感谢!
通过WorksheetFunction`FilterXML()的替代方法
如果您处置Excel版本。2013+,您可以执行以下操作:
Sub ExampleCall()
Dim myXML As String, myXPath As String
myXML = WorksheetFunction.WebService("https://geo.fcc.gov/api/census/block/find?latitude=40.000&longitude=-90.000&format=xml")
myXPath = "//County/@name"
Debug.Print WorksheetFunction.FilterXML(myXML, myXPath) ' ~> Cass
End Sub
进一步的提示FilterXML()
及其XPath参数
以双斜杠开头//
的XPath字符串"//County/@name"
搜索
<County>
节点在任何层级返回@
。该FilterXML()
函数返回其文本内容。请参见FilterXML()函数和WebService()函数。
当然,可以在工作表公式中直接使用这两个函数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句