Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用excelvba访问XML响应_Excel_Xml_Vba - Fatal编程技术网

如何使用excelvba访问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

我有一个excel电子表格,其中有25000多条记录,包括纬度/经度坐标和其他数据。我正在尝试使用Excel VBA脚本,使用以下美国人口普查web服务链接(包括一个示例坐标),根据Lat/Lon查找相关的县名称

这将返回以下响应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>
我假设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将获取当前活动的任何工作表的值。