如何使用Excel VBA访问XML响应

用户名

我有一个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部分是我在从响应(?)中选择正确部分时需要帮助的地方。

非常感谢!

TM值

通过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"搜索

  1. <County> 节点任何层级返回
  2. 次要@name 属性,必须由前导@FilterXML()函数返回其文本内容。

请参见FilterXML()函数WebService()函数

当然,可以在工作表公式中直接使用这两个函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章