2010-09-29 93 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)')