繁体   English   中英

如何使用 Excel VBA 访问 XML 响应

[英]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"搜索

  1. 任何层次结构级别的<County>节点返回
  2. 必须由前导@标识的从属@name属性 FilterXML() function 返回其文本内容。

请参阅FilterXML() functionWebService() function

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM