2012-01-24 53 views
0

我尝试从Google Geocoding API中使用C#和ASP.net获取一些数据。但是我在XML响应方面遇到了问题。我得到有效的XML,并且除了“address_component”元素之外,我还可以获得evry元素。 (XML是这样的:http://maps.googleapis.com/...无法从Google Geocoding API获取address_component元素LINQ的XML输出

/* data is a string with XML from Google server */    
    XDocument receivedXml = new XDocument(); 
    receivedXml = XDocument.Parse(data); 
    XName address = XName.Get("address_component"); 

    var root = reciviedXml.Root;    //returns corect XElement 
    XElement result = root.Element("result"); //returns corect XElement 
    IEnumerable<XElement> components = result.Elements("address_component"); //returns empty collection 

这是另一种方式,I'have它试图用同样的结果。

var results = reciviedXml.Descendants("address_component"); 

当我试图得到的像一些后裔:

var types = receivedXml.Descendants("type"); 

它是空的集合。但“结果”标记中的另一个元素(如“位置”标记)可以成功获取。

感谢您的任何建议。

回答

0

以下:

var receivedXml = XDocument.Load("http://maps.googleapis.com/maps/api/geocode/xml?latlng=49.1962253,16.6071422&sensor=false"); 
Console.WriteLine(receivedXml.Root.Element("result").Elements("address_component").Count()); 
Console.WriteLine(receivedXml.Descendants("address_component").Count()); 

分别写入10和28。确保你使用的是同一个实例 - 在你的问题中你使用了regediedXml以及reciviedXml,所以你可能有两个实例XDocument,其中一个实例可能包含不同的数据。你也不需要实例化XDocument,因为XDocument.Parse()会为你做这件事(而地址变量似乎是未使用的)

+0

感谢你的支持,实际上我在处理XML的另一个步骤中遇到了错误, _components_不是空的。 – PavelKumpan