2010-09-29 2 views
0

Я вызываю webservice (url ниже) и получаю результаты XML в SQL Server как varchar (8000), а затем преобразовываю это в XML. Это прекрасно работает. Я хочу проанализировать эту XML-информацию в ее индивидуальных значениях, но продолжать получать нулевые значения. Это моя первая попытка использования XML на моем сервере SQL 2008, поэтому я знаю, что мне не хватает тривиального элемента.TSQL XML Parsing

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)') 

Возвращения "Copyright © 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)')