2012-05-20 1 views

ответ

4

Конечно, это полностью зависит от фактического поиска, который вы хотите выполнить. Предположим, вы хотите найти все места в Великобритании, которые начинаются с Lon. URL, который будет выполнять этот запрос (в качестве примера, многое может измениться для реального поиска) является:

http://api.geonames.org/search?name_startsWith=lon&country=GB&maxRows=10&username=demo 

Вы можете совать, что в вашем браузере и увидеть результаты:

<geonames style="MEDIUM"> 
<totalResultsCount>334</totalResultsCount> 
<geoname> 
    <toponymName>London</toponymName> 
    <name>London</name> 
    <lat>51.50853</lat> 
    <lng>-0.12574</lng> 
    <geonameId>2643743</geonameId> 
    <countryCode>GB</countryCode> 
    <countryName>United Kingdom</countryName> 
    <fcl>P</fcl> 
    <fcode>PPLC</fcode> 
</geoname> 
<geoname> 
    <toponymName>Lone</toponymName> 
    <name>Lone</name> 
    <lat>58.33333</lat> 
    <lng>-4.88333</lng> 
    <geonameId>2643732</geonameId> 
    <countryCode>GB</countryCode> 
    <countryName>United Kingdom</countryName> 
    <fcl>P</fcl> 
    <fcode>PPL</fcode> 
</geoname> 
<!-- and so on ... --> 
</geonames> 

Обратите внимание, что вы хотите, чтобы lat и lng элементов под каждым geoname. С помощью LINQ к XML (включая System.Linq и System.Linq.Xml в своих декларациях пространства имен):

var xml = XElement.Load("http://api.geonames.org/search?name_startsWith=lon&country=GB&maxRows=10&username=demo"); 

var locations = xml.Descendants("geoname").Select(g => new { 
        Name = g.Element("name").Value, 
        Lat = g.Element("lat").Value, 
        Long = g.Element("lng").Value 
       }); 

foreach (var location in locations) 
{ 
    Console.WriteLine("{0}: {1}, {2}", location.Name, location.Lat, location.Long); 
} 

Конечно, вы можете использовать эти значения по-разному, и вы можете разобрать Lat и Long в парном разряде.

+0

Это сделало. Спасибо! – Megaoctane