0

我正在调用一个 web 服务(下面的 url),并将 XML 结果作为 varchar(8000) 返回到 SQL Server 中,然后将其转换为 XML。这完美地工作。我想将这个 XML 信息解析为它的单个值,但继续获取空值。这是我第一次尝试在我的 SQL 2008 服务器上使用 XML,所以我知道我错过了一个非常琐碎的项目。

http://dev.virtualearth.net/Services/v1/GeocodeService/GeocodeService.asmx/Geocode?culture=en-us&count=10&query=1%20microsoft%20way,%20redmond,%20wa&landmark=&addressLine=&locality=&postalTown=&adminDistrict= &district=&postalCode=&countryRegion=&mapBounds=¤tLocation=&curLocAccuracy=&entityTypes=&rankBy=

我正在接收收到的响应并将其存储到@XML 中。

SET @XML = CAST(@Response AS XML)

我接下来尝试提取邮政编码以获取我的结果并接收 NULL 或错误的节点。

返回 NULL

SELECT @XML.value('(/GeocodingResult/Results/Address/PostalCode) [1]', 'varchar(50)') 

返回“版权所有 © 2010 Microsoft 及其供应商。全部”(不带引号)

SELECT @XML.value('(/) [1]', 'varchar(50)') 
4

1 回答 1

0

您的 XPath 是错误的 - 您的根节点是GeocodingResponse(not GeocodingResult),并且您在GeocodingResult此过程中缺少 a 。

试试这个 XPath:

/GeocodingResponse/Results/GeocodingResult/Address/PostalCode

或者这个 SQL XQuery:

SELECT 
   @XML.value('(/GeocodingResponse/Results/GeocodingResult/Address/PostalCode) [1]', 
              'varchar(50)') 
于 2010-09-29T04:57:00.880 回答