2010-09-29 74 views
0

我打电话给一个web服务(下面的URL),并将XML结果作为varchar(8000)返回到SQL Server中,然后将其转换为XML。这工作完美。我想将这个XML信息解析为它的单个值,但仍然得到空值。这是我在我的SQL 2008服务器上使用XML的第一次尝试,所以我知道我错过了一个非常简单的项目。TSQL 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=&currentLocation=&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)') 

回答

0

你的XPath是错误的 - 你的根节点GeocodingResponse(不GeocodingResult ),并且你一路上错过了GeocodingResult

试试这个XPath:

/GeocodingResponse/Results/GeocodingResult/Address/PostalCode 

或该SQL的XQuery:

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