[英]How to access XML response using Excel VBA
我有一个 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>
我遇到的问题是我需要访问 County 节点中包含的“名称”值(即本例中的“Cass”),并且该值将被复制到 County 列下的 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部分是我需要帮助从响应中选择正确部分的地方(?)。
非常感谢!
今天在搜索更多内容时,我找到了原始问题的解决方案。
对于那些感兴趣的人,您可以访问返回的 xml 响应中的 County 属性“名称”,并通过将上述代码部分替换为以下内容来写出:
Original:
Set xNode = XDoc.SelectSingleNode("/Response/County")
MsgBox xNode.Text
Updated:
Set xNode = XDoc.SelectSingleNode("//Response/County/@name")
MsgBox 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>
节点返回@
标识的从属@name属性。 FilterXML()
function 返回其文本内容。请参阅FilterXML() function和WebService() function 。
当然,可以在工作表公式中直接使用这两个函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.