2010-09-14 2 views
1

Quelqu'un peut-il m'aider s'il vous plaît? J'essaie d'extraire les valeurs PostalCode, Latitude et Longitude du XML ci-dessous en utilisant LINQ. Mes efforts aboutissent à un IEnumerable nul! Le fichier XML a été renvoyé à partir du serveur BING REST. Je suis sûr que ce n'est pas difficile, c'est juste mon LINQ est pauvre. Merci à l'avanceS'il vous plaît aidez avec LINQ à XML avec BING Maps

<?xml version="1.0"?> 
<GeocodeFeed > 
    <GeocodeEntity Id="1" xmlns="http://schemas.microsoft.com/search/local/2010/5/geocode"> 
    <GeocodeRequest Culture="en-GB" Query="RG6 1WG" /> 
<GeocodeEntity Id="1" xmlns="http://schemas.microsoft.com/search/local/2010/5/geocode"> 
    <GeocodeRequest Culture="en-GB" Query="RG6 1WG" /> 
    <GeocodeResponse DisplayName="RG6 1WG, Wokingham, United Kingdom" EntityType="Postcode1" Confidence="High" StatusCode="Success"> 
     <Address AdminDistrict="England" CountryRegion="United Kingdom" FormattedAddress="RG6 1WG, Wokingham, United Kingdom" PostalCode="RG6 1WG" /> 
     <RooftopLocation Latitude="51.461179330945" Longitude="-0.925943478941917" /> 
    </GeocodeResponse> 
</GeocodeEntity></GeocodeFeed> 
+0

Pouvez-vous nous montrer le code que vous avez essayé? –

+0

Juste une supposition, mais assurez-vous que vous utilisez l'espace de noms, Linq to XML renverra un ensemble vide si vous n'incluez pas l'espace de noms. –

Répondre

1

Je suppose que si un GeocodeResponse a un élément d'adresse, il a également un élément de RooftopLocation.

XDocument document = XDocument.Load(<your feed>); 
IEnumerable<XElement> responses = document.XPathSelectElement("//GeocodeEntity/GeocodeResponse[Address]"); 

foreach (XElement response in responses) 
{ 
    string postalCode = response.Element("Address").Attribute("PostalCode").Value; 
    string latitude = response.Element("RooftopLocation").Attribute("Latitude").Value; 
    string longitude = response.Element("RooftopLocation").Attribute("Longitude").Value; 
} 

Espérons que cela devrait vous aider à démarrer où vous voulez aller ...

1

Merci Neil.T: Votre code ne fonctionne pas vraiment, mais m'a donné assez pour aller plus loin, un grand merci. Voici ma première solution, je suis sûr qu'il peut être refactorisé, etc. Avant d'utiliser LINQ, j'avais des expressions régulières très désagréables qui faisaient le travail, heureusement, ils sont une chose du passé dans cette solution.

 float latitude, longitude; 
     string postalCode; 
     XDocument loaded = XDocument.Load(url); 
     IEnumerable<XNode> responses = loaded.DescendantNodes(); 
     foreach (XElement response in responses) 
     { 
      if (response.Name.LocalName.Equals("Address")) 
      { 
       postalCode = response.Attribute("PostalCode").Value; 
      } 
      if (response.Name.LocalName.Equals("RooftopLocation")) 
      { 
       latitude = float.Parse(response.Attribute("Latitude").Value); 
       longitude = float.Parse(response.Attribute("Longitude").Value); 
      } 
     }  
Questions connexes