XML-разбор TSQL

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

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 или неправильный узел.

Возвращает НУЛЬ

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

Возвращает «Авторские права © 2010 Microsoft и ее поставщики. Все» (без кавычек)

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

person NTBuddy    schedule 29.09.2010    source источник


Ответы (1)


Ваш XPath неверен — ваш корневой узел GeocodingResponse (а не GeocodingResult), и вам не хватает GeocodingResult по пути.

Попробуйте этот XPath:

/GeocodingResponse/Results/GeocodingResult/Address/PostalCode

или этот SQL XQuery:

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