2010-09-29 6 views
0

J'appelle un webservice (URL ci-dessous) et je récupère les résultats XML dans SQL Server en tant que varchar (8000), puis je convertis cela en XML. Cela fonctionne parfaitement. Je veux analyser ces informations XML dans ses valeurs individuelles, mais continuer à obtenir des valeurs nulles. C'est la première fois que j'utilise XML sur mon serveur SQL 2008, alors je sais qu'il me manque un élément très trivial.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=

Je prends la réponse reçue et le stockage dans @XML. Je suis ensuite en train d'essayer de retirer le code postal pour obtenir mes résultats et recevoir un NULL ou le mauvais nœud.

RETURNS NULL

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

Retours "Copyright © 2010 Microsoft et ses fournisseurs tout." (Sans les guillemets)

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

Répondre

0

Votre XPath est erroné - votre nœud racine est GeocodingResponse (non GeocodingResult), et il vous manque un GeocodingResult en cours de route.

Essayez cette XPath:

/GeocodingResponse/Results/GeocodingResult/Address/PostalCode 

ou cette XQuery SQL:

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