2013-10-14 3 views
1

Я использую Google API геокодирования, но он возвращает XML, и я не знаю, как его разобрать.Как анализировать XML с помощью C#?

Я пытаюсь получить широту в документе XML, который выглядит, как это ...

<GeocodeResponse> 
<status>OK</status> 
<result> 
    <type>street_address</type> 
    <formatted_address>1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA</formatted_address> 
    <address_component> 
    <long_name>1600</long_name> 
    <short_name>1600</short_name> 
    <type>street_number</type> 
    </address_component> 
    <address_component> 
    <long_name>Amphitheatre Pkwy</long_name> 
    <short_name>Amphitheatre Pkwy</short_name> 
    <type>route</type> 
    </address_component> 
    <address_component> 
    <long_name>Mountain View</long_name> 
    <short_name>Mountain View</short_name> 
    <type>locality</type> 
    <type>political</type> 
    </address_component> 
    <address_component> 
    <long_name>San Jose</long_name> 
    <short_name>San Jose</short_name> 
    <type>administrative_area_level_3</type> 
    <type>political</type> 
    </address_component> 
    <address_component> 
    <long_name>Santa Clara</long_name> 
    <short_name>Santa Clara</short_name> 
    <type>administrative_area_level_2</type> 
    <type>political</type> 
    </address_component> 
    <address_component> 
    <long_name>California</long_name> 
    <short_name>CA</short_name> 
    <type>administrative_area_level_1</type> 
    <type>political</type> 
    </address_component> 
    <address_component> 
    <long_name>United States</long_name> 
    <short_name>US</short_name> 
    <type>country</type> 
    <type>political</type> 
    </address_component> 
    <address_component> 
    <long_name>94043</long_name> 
    <short_name>94043</short_name> 
    <type>postal_code</type> 
    </address_component> 
    <geometry> 
    <location> 
    <lat>37.4217550</lat> 
    <lng>-122.0846330</lng> 
    </location> 
    <location_type>ROOFTOP</location_type> 
    <viewport> 
    <southwest> 
    <lat>37.4188514</lat> 
    <lng>-122.0874526</lng> 
    </southwest> 
    <northeast> 
    <lat>37.4251466</lat> 
    <lng>-122.0811574</lng> 
    </northeast> 
    </viewport> 
    </geometry> 
</result> 
</GeocodeResponse> 

Как я могу это сделать? Это, насколько я мог дойти.

string baseURL = "https://maps.googleapis.com/maps/api/geocode/xml?"; 
string fullURL = baseURL + "address=" + address + "&sensor=false"; 
Uri ServivrUri = new Uri(fullURL); 
WebClient proxy = new WebClient(); 
byte[] abc = proxy.DownloadData(ServivrUri); 

MemoryStream stream = new MemoryStream(abc); 
XmlDocument xDocument = new XmlDocument(); 
xDocument.Load(stream); 
+4

Try XDocument , это немного проще в использовании, чем XmlDocument. –

+0

Используйте XPath. Навигация намного проще. –

+0

@CoryNelson не могли бы вы указать мне некоторые примеры. я пробовал смотреть по всему Интернету, как это сделать, но я просто не могу ничего с собой поделать. – wyatt

ответ

2

Вы должны использовать XDocument вместо XmlDocument

var xDocument = XDocument.Load(stream); 

Затем вы можете использовать linqToXml

Например, для получения широты, вы можете попробовать это

var latitude = xDocument.Descendants("geometry").Descendants("location") 
         .First().Element("lat").Value; 
+0

VS не может найти ссылку на Descendants(). Это в System.Xml.Linq namspace? @Esteban Elverdin – wyatt

+0

Извините, я не заметил, что вы использовали XmlDocument, я обновил ответ –

+0

Да, я уловил это из комментариев Кори. спасибо, я попробую это. – wyatt

Смежные вопросы