如何使用excelvba访问XML响应
我有一个excel电子表格,其中有25000多条记录,包括纬度/经度坐标和其他数据。我正在尝试使用Excel VBA脚本,使用以下美国人口普查web服务链接(包括一个示例坐标),根据Lat/Lon查找相关的县名称 这将返回以下响应xml如何使用excelvba访问XML响应,excel,xml,vba,Excel,Xml,Vba,我有一个excel电子表格,其中有25000多条记录,包括纬度/经度坐标和其他数据。我正在尝试使用Excel VBA脚本,使用以下美国人口普查web服务链接(包括一个示例坐标),根据Lat/Lon查找相关的县名称 这将返回以下响应xml <Response status="OK" executionTime="0"> <Block FIPS="170179601002012" bbox="-90.013605,39.996144,-89.994837,40.01066
<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>
我假设xNode.Text部分是我需要帮助从响应(?)中选择正确部分的地方
非常感谢 在今天的搜索中,我找到了我原来问题的答案 对于那些感兴趣的人,您可以访问返回的xml响应中的County属性“name”,并通过将上述代码部分替换为以下内容将其写出:
Original:
Set xNode = XDoc.SelectSingleNode("/Response/County")
MsgBox xNode.Text
Updated:
Set xNode = XDoc.SelectSingleNode("//Response/County/@name")
MsgBox xNode.Text
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() 如果你处理了Excel版本。2013+您可以执行以下操作:
Original:
Set xNode = XDoc.SelectSingleNode("/Response/County")
MsgBox xNode.Text
Updated:
Set xNode = XDoc.SelectSingleNode("//Response/County/@name")
MsgBox xNode.Text
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
字符串“//country/@name”
搜索
节点@
标识的子项@name属性。FilterXML()
函数返回其文本内容当然,也可以在工作表公式中直接使用这两个函数。发布了一个使用
FilterXML()
函数的替代方法,进一步解释了XPath和前面的双斜杠,您可以将其缩短为“//County/@name”btw。-进一步提示:尝试使用完全限定的范围引用,例如通过工作表的代码(名称)Sheet1.Cells(i+2,14)。Value=xNode.Text
,否则VBA将获取当前活动的任何工作表的值。